"Steven Schveighoffer" <schvei...@yahoo.com> wrote in message 
news:op.vybq4xkkeav7ka@localhost.localdomain...
> On Fri, 08 Jul 2011 18:45:58 -0400, Andrej Mitrovic 
> <andrej.mitrov...@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


Reply via email to