How to make gcc on SUN calculate floating points the same way as in Linux

Posted by Marina on Stack Overflow See other posts from Stack Overflow or by Marina
Published on 2010-04-26T22:27:47Z Indexed on 2010/04/26 22:33 UTC
Read the original article Hit count: 309

Filed under:
|
|

I have a project where I have to perform some mathematics calculations with double variables. The problem is that I get different results on SUN Solaris 9 and Linux. There are a lot of ways (explained here and other forums) how to make Linux work as Sun, but not the other way around. I cannot touch the Linux code, so it is only SUN I can change. Is there any way to make SUN to behave as Linux?

The code I run(compile with gcc on both systems):

int hash_func(char *long_id)          
{                                 
    double      product, lnum, gold;
    while (*long_id)
        lnum = lnum * 10.0 + (*long_id++ - '0');
    printf("lnum  => %20.20f\n", lnum);
    lnum = lnum * 10.0E-8;
    printf("lnum  => %20.20f\n", lnum);
    gold = 0.6125423371582974;
    product = lnum * gold;
    printf("product => %20.20f\n", product);
    ...
}

if the input is 339886769243483

the output in Linux:

lnum  => 339886769243**483**.00000000000000000000

lnum  => 33988676.9243**4829473495483398**

product => 20819503.600158**59827399253845**

When on SUN:

lnum => 339886769243483.00000000000000000000

lnum => 33988676.92434830218553543091

product = 20819503.600158**60199928283691**

Note: The result is not always different, moreover most of the times it is the same. Just 10 15-digit numbers out of 60000 have this problem.

Please help!!!

© Stack Overflow or respective owner

Related posts about linux

Related posts about solaris