Remix.run Logo
ncurses1010 2 hours ago

With the default initialization to nan, do you ever run into situations where people are searching for common sources for nan (nan literals, div by zero) and they can't find it? Or cases where only some branches but not others initialize the float?

WalterBright 2 hours ago | parent [-]

To leave a variable uninitialized, use the construction:

    int x = void;
Note that nobody is going to write this by accident. And it's easy to grep for.

To find the source of a NaN, it helps to know that every operation that has a NaN as an operand produces a NaN as a result. So if you see a NaN in the output, you can work backwards to where it originated.

jcranmer an hour ago | parent [-]

> every operation that has a NaN as an operand produces a NaN as a result.

That's not true. The minimum/maximum functions (fmin and fminimum_num variants, but not the fminimum one) treat NaN inputs as not-present, so return the non-NaN value if there is one. Similarly, hypot also treats NaN inputs as not-present. pow and compoundn will ignore NaN exponents if the base is 1.

WalterBright 38 minutes ago | parent [-]

Yes, there are some functions where if one operand has no effect on the result, a NaN value will also have no effect.