截去誤差 |
答題得分者是:Royce520
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
#include |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
|
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
syao 你好,
有三個原因跟這個現象有關:
第一、因為浮點數在電腦裡面的表示方式...有其特定的儲存方式
分為指數與對數部分... 因此有所謂有效位數的問題, 便存在一定
的表示誤差, ... float 跟 double 就不一樣.
第二、與編譯器與指定的編譯組態有關, 當編譯器再分析程式時,
碰到 0.1加三次與0.3 會給予不同的浮點表示(可能小數點後五位才出現差異)
再者, 以 Dev-C++來說, 它以 double 方式來定義與設定初值
bool b = (0.1+0.1+0.1) == 0.3; // 不同
而0.1加三次累積了誤差... 與0.3的浮點表示就不相同
bool b1 = (float)(0.1+0.1+0.1) == (flaot)(0.3); // 相同
第三、編譯器看到 double f1 = 0.3; 與 double f2= 0.3f;
有時候也會給予不一樣的浮點表示 在電腦計算中使用浮點數, 是要很小心的... 很容易在數值計算上產生誤差,
得到不對的結果...
------
不要忘記呼吸,不要忘記編程! ∩__∩ |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
#include |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |