Movement against float.init being nan

Hipreme msnmancini at hotmail.com
Sat Aug 20 13:19:54 UTC 2022


On Saturday, 20 August 2022 at 05:18:20 UTC, Walter Bright wrote:
> On 8/19/2022 8:12 PM, Steven Schveighoffer wrote:
>> [...]
>
> I don't see how. Any operation with a NaN produces a NaN 
> result. If you've got a NaN result, it can be traced back to 
> its source. This is hard with 0 initialization.
>
>
>> [...]
>
> I don't know why floating point for drawing coordinates? 
> Besides, when I wonder if a function is being called, I put a 
> printf in it. Or set a breakpoint in the debugger. This is 
> routine debugging work. Then I'll look at the values of the 
> parameters. Again, routine. Back in the olden days, I'd have 
> the embedded system click the speaker to see if it entered a 
> function :-)
>
>
>> [...]
>
> It is not silent. Every single usage of NaN produces a NaN 
> result. If printing a NaN value, the result is "NaN".
>
>
>> [...]
>
> struct S { float x = 0; }
>
>
>> [...]
>
> Because I've seen what happens with that. The compiler 
> complains about no initializer, and the programmer just puts in 
> "0" to shut up the compiler. He does not make the effort to 
> figure out what it should be initialized to. The reviewer 
> wastes time trying to figure why it is uselessly initialized to 
> zero.
>
> This is an especial problem when the initialized value is never 
> used. The reviewer is left wondering if it is a bug. D is 
> designed this way so that explicit initializations to a value 
> are *intentional* rather than a side effect of compiler error 
> messages.
>
> This is all part of D's design to encourage writing code that 
> is easier to debug, review and maintain. Even if it takes a 
> little more writing up front.


Drawing with float is required a lot on modern drawing API. What 
motivated me doing that post was firstly because I was sending 
OpenGL NaN coordinates, which resulted in needing a gpu debugger 
for that.

I don't see how easier it is to track a nan. Division by zero 
causes exception which is the best thing ever. Multiplication 
produces a zero result, which is pretty obvious to track. If the 
number does not change you will pretty much print both values and 
you'll easily find the 0 there.


More information about the Digitalmars-d mailing list