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-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to