
Date: Sun, 24 Feb 2019 13:53:31 +1100 (AEDT) From: Damian McGuckin <damianm@....com.au> To: musl@...ts.openwall.com cc: Shane Seelig <stseelig@...l.com> Subject: Re: x87 asin and acos On Sat, 23 Feb 2019, Rich Felker wrote: >> They don't seem to be numerically equal. For example, if x is smaller >> than sqrt(LDBL_EPSILON/2), 1x**2 is 1, but (1x)*(1+x) is not. >> don't recall the process of writing the function in detail, but I'm >> pretty sure this matters to the result, especially since sqrt then >> expands the magnitude of the error. > > After some discussion on irc, I think the above may be wrong. Yes and no. Interestingly, if you to look at double (or float) for now 1  x**2 == 1 if x < sqrt(DBL_EPSILON/2) whereas (1  x) is not 1 nor is (1 + x) although interesting, to the precision (a (1  x) * (1 + x) == 1 if DBL_EPSILON/2 < x < sqrt(DBL_EPSILON/2) But at x == DBL_EPSILON/2 (== the round bit) (1 + x) == 1 but (1  x) != 1 and so (1 + x) * (1  x) != 1 because DBL_EPSILON/2 affects the round bit. That said sqrt((1  x) * (1 + x)) = 1 + 0.5 * x == 1 because (DBL_EPSILON/2) * 0.5 is half the round bit and does not affect it. So, the formula does not affect the result of the sqrt(). The same happens for floats. I think the same can be said for long double. Regards  Damian Pacific Engineering Systems International, 277279 Broadway, Glebe NSW 2037 Ph:+61285710847 .. Fx:+61296929623  unsolicited email not wanted here Views & opinions here are mine and not those of any past or present employer
Powered by blists  more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.