Hi,

I face a problem with libm. With my Dora build the following assertion doesn't 
hold:

sqrt( pow( sqrt( 2.0 ), 4.0 ) ) == 2.0

1) With my old OE-classic / glibc-2.9 / PowerPC-hf it holds.
2) With my Debian desktop PC / glibc-2.17 / amd64 it holds.
3) With my new OE-core Dora / eglibc-2.18 / PowerPC-hf it doesn't hold.

Close enough one can think but the standardized test case I run requires the 
result to be 2.0.
A simple test program:
--------------------------------------------------------------------
#include <stdio.h>
#include <math.h>

int main(){

        double two = 2.0;
        double four = 4.0;

        double s1 = sqrt(two);
        printf("sqrt(%.20f) = %.20f\n", two, s1);
        double p   = pow(s1, four);
        printf("pow(%.20f, %.20f) = %.20f\n", s1, four, p);
        double s2 = sqrt(p);
        printf("sqrt(%.20f) = %.20f\n", p, s2);

}
--------------------------------------------------------------------

results from 1 and 2 (identical):
sqrt(2.00000000000000000000) = 1.41421356237309514547
pow(1.41421356237309514547, 4.00000000000000000000) = 4.00000000000000088818
sqrt(4.00000000000000088818) = 2.00000000000000000000

results from 3:
sqrt(2.00000000000000000000) = 1.41421356237309492343
pow(1.41421356237309492343, 4.00000000000000000000) = 3.99999999999999866773
sqrt(3.99999999999999866773) = 1.99999999999999955591

Does anyone know if this is a known "feature" of eglibc or know any other reason
for this difference?

Best Regards,
Mats
-- 
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to