Detecting inadvertent use of integer division

Bob Jones me at not.com
Tue Dec 15 11:21:13 PST 2009


"Don" <nospam at nospam.com> wrote in message 
news:hg7gbm$1vln$1 at digitalmars.com...
> Bob Jones wrote:
>> "Don" <nospam at nospam.com> wrote in message 
>> news:hg5nkk$1n37$1 at digitalmars.com...
>>> bearophile wrote:
>>>> Don:
>>>>>> In Pascal too (and OCaML, but the situation is different) they are 
>>>>>> separated. I think here having two operators is better,
>>>>> Why?
>>>> You are intelligent and expert so you must know my answer, so I fear 
>>>> yours is a trick question :-)
>>> No, it's not a trick question. You've used Python extensively, I 
>>> haven't.
>>>
>>>> Two operators allow to reduce the need for casts (and 
>>>> rounding/truncation), and are more explicit, allowing the code to 
>>>> express its meaning better to people that come after the original 
>>>> programmer.
>>> OK. I'm trying to get most of the benefits without needing an extra 
>>> operator.
>>
>> Having made the switch from Delphi to C++ a few years ago I ran into this 
>> alot. I dislike that I have to litter my arithmetic expresions with casts 
>> in order to get the division operator to do what I want it to. And I 
>> suspect all of those who are used to having seperate intdiv & fltdiv 
>> operators will agree.
>
> Your arithmetic expressions would only become "littered with casts" if you 
> regularly use integer division inside floating-point expressions.
> Personally, I cannot recall *ever* having intentionally used integer 
> division inside a floating point expression. (I've seen inadvertent uses 
> of it, plenty of times).

I grepped around 60 instances of

double y = a / double(b);

In my last project. That's what I'm talking about. Where you have to cast 
either top or bottom to float in order to get the division operator to do 
float division of two int operands.

There's also the (perhaps MSVC specific) issue that I have to cast doubles 
to floats to get rid of the loss of precision warning message. It's a usuful 
warning on ints, but for floats it's completely redundant imo.


>> The fact that adding a specific intdiv operator would not only avoid more 
>> casting, but remove the the need for casting in a lot of existing cases
>
> I bet there are negligible cases where casting is required.

I didnt find any instances of an expresion containg intdiv being assigned to 
a float, so yeah, that is rare. But not the case where you have two ints and 
want the actual division done in float.







More information about the Digitalmars-d mailing list