numerical bug
Dar Scott
dsc at swcp.com
Sat Mar 30 06:50:01 EST 2002
On Saturday, March 30, 2002, at 08:30 AM, Ivers, Doug E wrote:
> Please be aware that put 10^-1
>
> yields
>
> 0.10000000000000000555
> This is a bug. I'll code a workaround for now and assume that
> this will be fixed in the next release of Rev.
>
Look at the recent discussion "MOD function does not work" and
"Binary Floating Point".
This is a natural consequence of the Revolution engine (Metacard)
using binary floating point for values that are the result of math
functions. (Plus, any limitations of the ^ function.) The use of
floating point probably speeds a series of math operations, notably
those in loops. At processor speeds available in the early days of
Metacard, this may have been a serious consideration.
I don't think we can expect a change here in the next release of
Revolution unless something has been in the works for a while. The
best we might hope for in the short run is better binary floating
point.
I proposed a number change on the "improve" list. It is a major
change and is not 100% backward compatible.
You might be able to live with Revolution numbers as they are.
Remember you are limited to about 17 digits. Even when you seem to
be using numbers with less than that, they are only accurate to
that; assume every number has an error. Avoid = and use <, <=, >=
or > instead, when you can. Use (x + empty) to force rounding as
specified in numberFormat, if you need it. This forces the
internal representation to string (which can be used as a number
again). Use it for =, also. You can also use round() and
trunc(). The round function allows you to specify number of digits
beyond the decimal point.
Dar Scott
More information about the use-livecode
mailing list