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