[fpc-devel]MATH.PP
Jonas Maebe
jonas at zeus.rug.ac.be
Mon Oct 15 15:20:41 CEST 2001
On maandag, oktober 15, 2001, at 09:25 , Michael Van Canneyt wrote:
>> const Epsilon = 1.0e-9;
>> ....
>> if (x-1)<=Epsilon then x:=1;
>> if (x+1)<=Epsilon then x:=-1;
>>
>> I made these changes because of InvalidArgument exception when arcsin
>> parameter (displayed by GDB) is 1 (but, I think, it was near 1, but
>> not 1).
>
> But if it is larger than 1, arcsin is not defined ?
> You deliberately introduce an error in the calculation in this way ?
The problem is that floats on computers are inherently inexact and if
you perform a number of calculations the results becomes more inexact
after every operation (I had a lot of trouble with this while
implementing the str_real() routine). You should indeed work with a
small epsilon to compensate for this, but the size of this epsilon
depends on the size of the best real type available (for extended = 10
bytes, it could be 1.0e-9, but for extended = 8 bytes, it will be
bigger).
> Because then reals are used for the comparision, since in the case
> of abs(X) > 1 the '1' will probably be interpreted as an integer.
No, if one operand in an expression is a float, everything will be
converted to a float.
Jonas
More information about the fpc-devel
mailing list