# Killing integer division problems?

bachmeier no at spam.net
Tue Aug 4 18:11:23 UTC 2020

```On Tuesday, 4 August 2020 at 15:43:19 UTC, burt wrote:
> On Tuesday, 4 August 2020 at 15:25:50 UTC, bachmeier wrote:

> That is not what I was proposing (please reread). I am just
> saying that the bottom one (assuming x is int and y is double)
> should issue a warning, unless it is explicitly told that
> integer division is intended.

It may not have been clear from my reply, but I was only saying
whatever is done, if anything, it has to preserve the constraint
that the same division return the same result. That part wasn't a

>> If x is an int and y is a double, you'd get different results,
>> and that would be awful. What's needed is something explicit
>> like this:
>>
>> y = double(7/3);
>> x = 7/3;
>> y = 7/3; // Error because of implicit cast
>
> This is the same as what I was proposing, except for the syntax
> to explicitly annotate integer division: in your example, you
> use a cast to double (to show you're casting from integer to
> division), in my example, you use a cast to int (to show you're
> truncating). Open for discussion, but the same idea.

It's kind of the same. There are two issues. One is the integer
division that is missed. The other is the silent
casting/promotion of an integer to a double. My opinion is that
it's rarely the case that this code does what you want:

double y = 7/3;

I just don't think that's reasonable. If you do want integer
division *and* you want to store it in a double, you should do
something like

double y = trunc(7.0/3);

or

int x = 7/3;
double y = x;

I see I had an error above. This

y = double(7/3);

should have been

y = double(7)/3;

The former is not clear, while the latter forces the result to be