This seems like what could be a common cause of bugs

Steven Schveighoffer schveiguy at yahoo.com
Fri Jul 8 16:49:35 PDT 2011


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.

-Steve


More information about the Digitalmars-d-learn mailing list