Re: [轉錄]Re: [問題]請問如何四捨五入...

看板NTUGIEE_EDA作者 (gwliao)時間20年前 (2006/03/18 12:08), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串4/10 (看更多)
※ 引述《yellowfishie (喵喵喵喵~~~)》之銘言: : : 推 crazying:你都取 floor 還不一樣就不會是 rounding 的問題了 = =a 03/17 23:37 我覺得不是rounding的問題, 因為都是IEEE 754的標準! 我不覺得Sun和AMD/intel會做錯. (他們應該不想像Pentium一樣賠到吐血) 所以我認為是software的問題居多. (也可能是gcc/glibc的問題, 因為float怪怪的) : solaris: : F = 2288000*0.576923 + 5250000*0.433333 = 3.595e+06 : ori: 3.595e+06 : (int) floor cast: 3595000 : linux: : F = 2288000*0.576923 + 5250000*0.433333 = 3.595e+06 : ori: 3.595e+06 : (int) floor cast: 3594999 orz是我機器的名字 XD 現在是ubuntu gwliao@orz:~/T$ cat a.c #include <stdio.h> int main(void) { double a,b,c,d,F; int I; a=2288000; b=0.576923; c=5250000; d=0.433333; F=a*b+c*d; I=F; printf("F=%2.30lf\n",F); printf("I=%-30d\n",I); } ---------------------------------------------- gwliao@orz:~/T$ gcc a.c;./a.out (這是intel+ubuntu) F=3594998.074000000022351741790771484375 I=3594998 [gwliao@edasun T]$ gcc a.c;./a.out (這是edasun) F=3594998.074000000022351741790771484375 I=3594998 vlsi-24 -r1- >./a.out (這也是Sun) F=3594998.074000000022351741790771484375 I=3594998 s917426@moon[/tmp/T]> ./a.out (這是AMD+FreeBSD) F=3594998.074000000022351741790771484375 I=3594998 ----------------------------------------------- 我不知道那裡有問題. 因為我的答案是一樣. Orz 不過用float的話, 結果的確不一樣. [gwliao@orz:~/T$ gcc a.c;./a.out F=3594998.250000000000000000000000000000 I=3594998 [gwliao@edasun T]$ gcc a.c;./a.out F=3594998.000000000000000000000000000000 I=3594998 vlsi-24 -r1- >gcc a.c;./a.out F=3594998.000000000000000000000000000000 I=3594998 s854128@moon[/tmp/T]> ./a.out F=3594998.250000000000000000000000000000 I=3594998 ---------------------------------------------------- gcc有個OPTION是 -msoft-float, 我將它enable. float: s854128@moon[/tmp/T]> ./a.out F=3594998.000000000000000000000000000000 I=3594998 gwliao@orz:~/T$ ./a.out F=3594998.000000000000000000000000000000 I=3594998 Sun的機器少了有些東西, 所以沒辦法像ubuntu一樣用軟87. 但是ubuntu用軟87後, 算出來的值跟Sun用硬體算出來的值一樣. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.125 ※ 編輯: gwliao 來自: 140.112.230.125 (03/18 12:50)

03/18 13:06, , 1F
float的差別是最小的那1個bit,看樣子好像是rounding的問題.
03/18 13:06, 1F
文章代碼(AID): #146uUc8i (NTUGIEE_EDA)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 10 篇):
文章代碼(AID): #146uUc8i (NTUGIEE_EDA)