Killing integer division problems?

burt invalid_email_address at cab.abc
Tue Aug 4 13:01:02 UTC 2020


On Tuesday, 4 August 2020 at 12:53:24 UTC, jmh530 wrote:
> On Tuesday, 4 August 2020 at 12:34:37 UTC, burt wrote:
>> [snip]
>>
>> Would such a change require a DIP? Could a 
>> -preview/-transition flag be added to warn me about integer 
>> divisions? What do you think?
>
> The problem is you have stuff like
> ```d
> int x = 2;
> int y = 4 / x;
> ```
> and now you would be force someone to write a cast.

I guess I should have been more specific, I meant only when 
converting to `double`/`float`/`real`, because then you will 
implicitly lose precision. When converting the result to `int`s, 
you already expect the loss in precision of the division, so it's 
not a big deal.

> That's a big enough change that it would require a DIP. Though 
> I've been hit by the same thing in the past, I would be a bit 
> skeptical you could get it through since a lot of code depends 
> on that.

Perhaps an opt-in flag (-vintdiv or something, just like 
-vtemplates/-vgc) would be more appropriate. It would be a useful 
tool, and I would have it active all the time.

> You could also always use something like below instead of the 
> operator overloading.
> double divide(T, U)(T x, U y)
>     if (isIntegral!T && isIntegral!U)
> {
>     return cast(double) / cast(double) y;
> }

The problem isn't fixing the problem, it's finding it. I would 
have to replace all my divisions with this function, and that's 
not very practical.



More information about the Digitalmars-d mailing list