亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 6351 | 回復(fù): 13
打印 上一主題 下一主題

浮點數(shù)轉(zhuǎn)整數(shù)疑惑 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-11-20 16:51 |只看該作者 |倒序瀏覽

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     float value = 1.333;
  6.     cout<<"value:"<<value<<endl;
  7.     cout<<"result:"<<(int)(value*1000)<<endl;
  8.    
  9.     value = 1.3333;
  10.     cout<<"value:"<<value<<endl;
  11.     cout<<"result:"<<(int)(value*10000)<<endl;
  12.    
  13.     value = 1.33333;
  14.     cout<<"value:"<<value<<endl;
  15.     cout<<"result:"<<(int)(value*100000)<<endl;
  16.    
  17.     value = 1.333333;
  18.     cout<<"value:"<<value<<endl;
  19.     cout<<"result:"<<(int)(value*1000000)<<endl;

  20.     return 0;
  21. }

復(fù)制代碼


代碼很簡單,AIX平臺,xlC編譯,運行結(jié)果如下:


  1. value:1.333
  2. result:1332
  3. value:1.3333
  4. result:13332
  5. value:1.33333
  6. result:133333
  7. value:1.33333
  8. result:1333333
復(fù)制代碼


為什么前兩個的result最后一位數(shù)字不對了,而后面的兩個result反而是正確的?

論壇徽章:
0
2 [報告]
發(fā)表于 2006-11-20 18:08 |只看該作者
關(guān)注。。。

BTW,我在VC6.0里運行也是這結(jié)果,不過改為double就OK了。還望高手解答!

論壇徽章:
0
3 [報告]
發(fā)表于 2006-11-20 18:21 |只看該作者
我記得浮點數(shù)的計算與存儲是有IEEE標(biāo)準(zhǔn)(754?)的,如果不嫌麻煩可以找標(biāo)準(zhǔn)看看。
竊以為如果不是想特別深究的話,不用去看這個標(biāo)準(zhǔn)。只要只道計算機對浮點數(shù)的存儲計算精度有限就可以了。

論壇徽章:
0
4 [報告]
發(fā)表于 2006-11-20 19:40 |只看該作者
精度問題吧。如果需要非常精確的計算,可以試試 GMP、APFloat 這些庫。

論壇徽章:
0
5 [報告]
發(fā)表于 2006-11-20 19:49 |只看該作者
我測試了兩個平臺。先是 MicroVAX 3900:

vax% cat > agd.cc << EOF
> #include <iostream>
> using namespace std;
>
> int main()
> {
>     float value = 1.333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*1000)<<endl;
>
>     value = 1.3333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*10000)<<endl;
>
>     value = 1.33333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*100000)<<endl;
>
>     value = 1.333333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*1000000)<<endl;
>
>     return 0;
> }
> EOF
vax% g++ -o agd agd.cc
vax% ./agd
value:1.333
result:1333
value:1.3333
result:13333
value:1.33333
result:133333
value:1.33333
result:1333333
vax% uname -a
NetBSD vax. 2.0 NetBSD 2.0 (GENERIC) #0: Thu Dec  2 19:18:27 CST 2004  builds@build:/big/builds/ab/netbsd-2-0-RELEASE/vax/200411300000Z-obj/big/builds/ab/netbsd-2-0-RELEASE/src/sys/arch/vax/compile/GENERIC vax
vax%


然后是 Intel 386-compatible:

bash-2.05$ cat > agd.cc << EOF
> #include <iostream>
> using namespace std;
>
> int main()
> {
>     float value = 1.333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*1000)<<endl;
>
>     value = 1.3333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*10000)<<endl;
>
>     value = 1.33333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*100000)<<endl;
>
>     value = 1.333333;
>     cout<<"value:"<<value<<endl;
>     cout<<"result:"<<(int)(value*1000000)<<endl;
>
>     return 0;
> }
> EOF
bash-2.05$ g++ -o agd agd.cc
bash-2.05$ ./agd
value:1.333
result:1332
value:1.3333
result:13332
value:1.33333
result:133333
value:1.33333
result:1333333
bash-2.05$ uname -a
OpenBSD earth 3.0 GENERIC#78 i386
bash-2.05$


可以想到,浮點運算的精度問題還和系統(tǒng)硬件平臺有關(guān)。

P.S. 在 VAX 上編譯程序,真慢呀。

論壇徽章:
0
6 [報告]
發(fā)表于 2006-11-20 21:50 |只看該作者
LZ 想了解浮點數(shù),可以看看我在 blog 里寫的一篇文章,挺詳細(xì)的

http://www.cublog.cn/u/11773/showart.php?id=191100

論壇徽章:
0
7 [報告]
發(fā)表于 2006-11-21 08:57 |只看該作者
樓上的,我看了你的blog的文章呢,可是還沒有搞明白問題呢。如果是精度限制的話,為什么前兩個result是不對的,而后面有效位長了,result反而是對的了?

論壇徽章:
0
8 [報告]
發(fā)表于 2006-11-21 12:54 |只看該作者
原帖由 tyc611 于 2006-11-20 18:08 發(fā)表
關(guān)注。。。

BTW,我在VC6.0里運行也是這結(jié)果,不過改為double就OK了。還望高手解答!


沒有人回答啊........

論壇徽章:
0
9 [報告]
發(fā)表于 2006-11-22 09:11 |只看該作者
頂一下,還望高手解答

論壇徽章:
0
10 [報告]
發(fā)表于 2006-11-22 09:17 |只看該作者
這沒什么可研究的了,既然不求精度就用float,如果刻意追求若干位精度,完全可自己用高精度算法實現(xiàn)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP