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