Forwarding Icarus's comment. What we're facing here seems that different implementations of a libm function may result different results at the last digits, right? Is there a function to test how accurate the libm functions are, and is there a libm function which tests for equality in a specified precision?
Lionel ---------- Forwarded message ---------- From: Icarus Sparry <[email protected]> Date: 31 January 2013 05:29 Subject: Re: [ast-users] Floating point oddities with pow()? Accuracy problem? To: Lionel Cons <[email protected]> pow(x, y) is typically implemented as exp(y * ln(x)) On Jan 30, 2013 8:24 PM, "Lionel Cons" <[email protected]> wrote: > > On 29 January 2013 10:50, Lionel Cons <[email protected]> wrote: > > Can someone explain why the the examples below yield a difference? IMO > > pow() should deliver the same result as a x*x*x*... sequence. Or not? > > > > ksh -c 'float x y ; ((x=y=.1 , y=pow(y,4.) , x=x*x*x*x)) ; printf > > "%30.30f\n" x-y' > > -0.000000000000000000000006617444 > > ksh -c 'float x y ; ((x=y=.1 , y=pow(y,6.) , x=x*x*x*x*x*x)) ; printf > > "%30.30f\n" x-y' > > -0.000000000000000000000000103397 > > ksh -c 'float x y ; ((x=y=.1 , y=pow(y,8.) , x=x*x*x*x*x*x*x*x)) ; > > printf "%30.30f\n" x-y' > > -0.000000000000000000000000001615 > > > > Platform is Suse 12.1 on AMD64. > > The difference between pow() and manual multiplication (example below) > revolves around certain values. Does that ring a bell? > > ksh -c 'float x y i ; for ((i=-5 ; i < 5 ; i=i+.1)) ; do ((x=y=.1*i , > y=pow(y,8) , x=x*x*x*x*x*x*x*x)) ; printf "%30.30f\n" x-y ; done' > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000211758236 > -0.000000000000000000000423516473 > 0.000000000000000000000211758236 > 0.000000000000000000000105879118 > 0.000000000000000000000105879118 > -0.000000000000000000000105879118 > -0.000000000000000000000211758236 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000052939559 > 0.000000000000000000000000000000 > 0.000000000000000000000052939559 > 0.000000000000000000000000000000 > 0.000000000000000000000013234889 > 0.000000000000000000000013234889 > 0.000000000000000000000013234889 > -0.000000000000000000000019852334 > 0.000000000000000000000006617444 > 0.000000000000000000000006617444 > 0.000000000000000000000003308722 > 0.000000000000000000000006617444 > 0.000000000000000000000006617444 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000827180 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000620385 > -0.000000000000000000000000206795 > 0.000000000000000000000000000000 > -0.000000000000000000000000206795 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000000051698 > -0.000000000000000000000000012924 > -0.000000000000000000000000006462 > -0.000000000000000000000000006462 > 0.000000000000000000000000000000 > -0.000000000000000000000000000807 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000012 > -0.000000000000000000000000000003 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000000000003 > -0.000000000000000000000000000012 > 0.000000000000000000000000000151 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000000000807 > 0.000000000000000000000000001615 > 0.000000000000000000000000006462 > 0.000000000000000000000000012924 > -0.000000000000000000000000012924 > -0.000000000000000000000000025849 > -0.000000000000000000000000051698 > 0.000000000000000000000000000000 > 0.000000000000000000000000103397 > 0.000000000000000000000000103397 > -0.000000000000000000000000413590 > -0.000000000000000000000000413590 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > -0.000000000000000000000001654361 > 0.000000000000000000000003308722 > 0.000000000000000000000006617444 > 0.000000000000000000000000000000 > 0.000000000000000000000006617444 > 0.000000000000000000000000000000 > 0.000000000000000000000013234889 > -0.000000000000000000000026469779 > -0.000000000000000000000026469779 > 0.000000000000000000000000000000 > -0.000000000000000000000026469779 > 0.000000000000000000000052939559 > 0.000000000000000000000052939559 > 0.000000000000000000000000000000 > 0.000000000000000000000052939559 > -0.000000000000000000000052939559 > -0.000000000000000000000105879118 > -0.000000000000000000000317637355 > 0.000000000000000000000000000000 > -0.000000000000000000000211758236 > 0.000000000000000000000000000000 > 0.000000000000000000000000000000 > 0.000000000000000000000423516473 > 0.000000000000000000000000000000 > > Lionel > _______________________________________________ > ast-users mailing list > [email protected] > http://lists.research.att.com/mailman/listinfo/ast-users -- Lionel _______________________________________________ ast-developers mailing list [email protected] http://lists.research.att.com/mailman/listinfo/ast-developers
