SKILL is notorious for the way it stores numbers in memory. e.g variable w, which
should be 0.4 gets stored as 0.3999999999999 or something like that.
So when you use it in 'if-else' loop like:
if( w == 0.4 then
You will end up in block bad unless you do something like
abs( w - 0.4 ) < 0.000001
or something like above.
Is there an elegant way to handle this in SKILL ?
There is nothing "notorious" or special with the way that SKILL stores floating point numbers compared to other programming languages. A floating point number is typically stored in an IEEE (754) format which is comprised of a sign, an exponent and a mantissa (or significand). Most decimal numbers do not have an exact
representation in the binary floating-point storage format
used in single-precision and double-precision data types. So in order to be able to test for equality in a reliable fashion, the best thing is to subtract one number from the other and test the remainder against a small number, exactly as you have shown. The small number could be a fraction of the input number so that the test works equally well for large values and smaller values.
Sorry, that's just how things are for floating point number comparison, I'm not sure if there is any better way?
Thanks Lawresce and Andrew.