Tentative Guidelines for Numbers
Dar Scott
dsc at swcp.com
Thu Apr 4 13:16:00 EST 2002
On Monday, April 1, 2002, at 02:22 PM, Dar Scott wrote:
> 3.
> Equality for numbers is tolerant of small differences.
>
> Use = for numbers in 2 above only after a couple calculations.
> Accumulated errors may go outside of what = will consider equal.
>
> Use < or < before <= or >=. Use any before =. (Actually, I'm
> guessing about <= or >=. Some tests need to be run to see if they
> have the same tolerance as =.)
>
Michael Mays described this as a characteristic of PPC numerics.
On my OS X on my Blue & White G3 I found = to be tolerant up to
plus or minus 9 times the weight of the LSB. Clearly, somebody had
decimal in mind. The lack of transitivity could be a problem in
some cases, but the use of = for numbers described in #2 (see
original email, 4/1) should be avoided in the case of a chain of
calculations, anyway.
I also noticed that =, > and < seem to be distinct. A number has
to be greater by 9 counts to be considered greater.
So, I amend my suggestion for #3:
**************
3.
Equality for numbers may tolerant of very small differences on some
computers. Nevertheless, even in this case, if a number is > or <
a number, it is not = to the number.
Equality might work after a couple calculations on some computers
and fail on others. For general scripting, continue to avoid =, if
possible. This does not apply to whole numbers in #1; this applies
to only large numbers or numbers with general fractional parts as
described in #2.
***************
Optionally, #3 could be dropped and the "15 digits" in #1 changed
to "14 digits". This can simplify the guideline.
I would also add this paragraph to #2:
***************
Functions that have a distinct step in value, such as round(),
trunc() and mod should be used with care when used with these
numbers. Normally, one does not care about the exact point of
rounding with round(), but the step point can be crucial with
trunc() or mod.
***************
Dar Scott
More information about the use-livecode
mailing list