This seems like what could be a common cause of bugs

Nick Sabalausky a at a.a
Sat Jul 9 10:28:25 PDT 2011


"Steven Schveighoffer" <schveiguy at yahoo.com> wrote in message 
news:op.vybq4xkkeav7ka at localhost.localdomain...
> On Fri, 08 Jul 2011 18:45:58 -0400, Andrej Mitrovic 
> <andrej.mitrovich at gmail.com> wrote:
>
>> This is just an observation, not a question or anything.
>>
>> void main()
>> {
>>     enum width = 100;
>>     double step = 1 / width;
>>
>>     writeln(step);  // 0
>> }
>>
>> I've just had this bug in my code. I forgot to make either width or 1
>> a floating-point type. IOW, I didn't do this:
>>
>> void main()
>> {
>>     enum width = 100.0;
>>     double step = 1 / width;   // or .1
>>
>>     writeln(step);  // now 0.01
>> }
>>
>> This seems like a very easy mistake to make. But I know the compiler
>> is probably powerless to do anything about it. It has an expression
>> resulting in an int at the RHS, and it can easily cast this to a
>> double since there's no obvious loss of precision when casting
>> int->double.
>
> BTW, this is definitely not something the compiler can determine.  You may 
> actually *want* to have integer division then convert to a double.
>
> So a lint tool would be perfect for this -- it cannot be an error, and 
> warnings don't exist in D.
>

Yea they do: dmd -wi




More information about the Digitalmars-d-learn mailing list