作者查詢 / phterry

總覽項目: 發文 | 留言 | 暱稱
作者 phterry 在 PTT [ C_and_CPP ] 看板的留言(推文), 共52則
限定看板:C_and_CPP
首頁
上一頁
1
2
下一頁
尾頁
Re: [語法] 在寫程式時 遇到將浮點數轉換成整數的問題
[ C_and_CPP ]60 留言, 推噓總分: +22
作者: holymars - 發表於 2009/09/16 10:49(16年前)
7Fphterry:浮點數->整數也有可能發生誤差的情形,請看下例:09/17 11:32
8Fphterry:float x = 1.801; int y = (int)(x * 1000.0);09/17 11:32
9Fphterry:這樣在 x86 上, y的結果會變成1800,而不是180109/17 11:33
10Fphterry:但是在其他的processer,就能得到正確的180109/17 11:34
12Fphterry:這不單純是乘法的誤差,可以看看下例:09/17 11:57
13Fphterry:int y = (int)(1.801 * 1000.0);09/17 11:58
14Fphterry:以及 float x = 1.801; int y; x *= 1000.0; y = (int)x;09/17 11:59
15Fphterry:以上這兩例都可以在x86上取得正確的180109/17 11:59
22Fphterry:不知道你有沒有親身驗證過這個問題... 上述的code你可以改09/17 12:54
23Fphterry:成double試看看,結果我就不說明了.09/17 12:55
25Fphterry:float改成double後,結果有什麼差異否?09/17 13:00
28Fphterry:1801是哪一段啊?09/17 13:05
29Fphterry:我實在不想和你戰,覺得沒什麼意義,我只不過想提醒大家可能09/17 13:07
30Fphterry:會被乎略的錯誤而已. x86 的浮點有一些特性會產生和其他09/17 13:08
31Fphterry:CPU不同的結果,如此而已.09/17 13:10
35Fphterry:其實我不是很懂我說的這個跟你說的有什麼關係耶...09/17 13:16
36Fphterry:或許你用你的想法解釋為何會有1800的結果會比較理想09/17 13:17
41Fphterry:double x; int y = (int)(x * 1000.0); 請問你的結果?09/17 13:19
44Fphterry:不好意思,我剛x忘了給初值,應該要double x = 1.801;09/17 13:22
45Fphterry:我用x86 32bit Linux執行的結果是180009/17 13:23
46Fphterry:在ARM Linux上跑,結果卻是1801,而1801也是我們所希望的09/17 13:23
49Fphterry:再來 float x = 1.801; int y = (int)(x * 1000.0f);09/17 13:26
50Fphterry:上面這樣寫,x86 -> 1800, ARM->180109/17 13:26
52Fphterry:你的意思是compiler還是CPU?09/17 13:32
56Fphterry:那原先的double->float四捨五入之說應該....09/17 13:34
58Fphterry:有一篇文章是一個日本人寫的,可能有點久了,我暫時找不到09/17 13:36
59Fphterry:大意是說x86的浮點有一個擴張精度,會讓指數部份變成15bit09/17 13:37
60Fphterry:而不是一般所認知的11bit09/17 13:37
[問題] 刪不掉 囧
[ C_and_CPP ]16 留言, 推噓總分: +4
作者: IDontBite - 發表於 2009/08/25 16:47(16年前)
1Fphterry:我比較想知道,你delete了後,還期待它會印出什麼?08/25 16:56
Re: [問題] 指標的指標 與 二維的指標問題
[ C_and_CPP ]21 留言, 推噓總分: +6
作者: su35 - 發表於 2009/06/13 23:47(16年前)
8Fphterry:這樣做,系統會配置一塊記憶體裡存這個字串,但是正如樓上06/13 23:57
9Fphterry:所述,是一個const,所以只能讀不能寫,如果你做以下的事06/13 23:58
10Fphterry:*ch1 = 'G'; /* 試著把第一個字元變大寫 */06/13 23:58
11Fphterry:或許可以編譯,但執行時一定會發生記憶體錯誤06/13 23:59
首頁
上一頁
1
2
下一頁
尾頁