MozTW 討論區 https://forum.moztw.org/ |
|
JAVASCRIPT https://forum.moztw.org/viewtopic.php?f=8&t=22139 |
第 1 頁 (共 1 頁) |
發表人: | Amauds [ 2008-04-11, 23:37 ] |
文章主題 : | JAVASCRIPT |
不太清楚JAVASCRIPT的運算邏輯, 3000*21.3-91-192=63617 3000*21.4-91-192=63916.99999999999 3000*10.1-43-91=30166 3000*10.2-43-91=30465.999999999996 這是硬體或系統的錯誤呢? Windows XP sp2 + Firefox 2.0.0.13 Windows XP sp2 + Internet Explorer 7.0 |
發表人: | legnaleurc [ 2008-04-12, 00:14 ] |
文章主題 : | |
浮點數的精準度問題吧 很多語言都會有的 |
發表人: | 訪客 [ 2008-04-12, 00:17 ] |
文章主題 : | |
Amauds 寫: 不太清楚JAVASCRIPT的運算邏輯,
3000*21.3-91-192=63617 3000*21.4-91-192=63916.99999999999 3000*10.1-43-91=30166 3000*10.2-43-91=30465.999999999996 這是硬體或系統的錯誤呢? Windows XP sp2 + Firefox 2.0.0.13 Windows XP sp2 + Internet Explorer 7.0 印象中和 binary float point 有關(原諒我,我不是很確定),有些十進位的有理數無法用二進位的有限小數來表示。 http://en.wikipedia.org/wiki/Binary_number 代碼: Yet another example:
document.write(1.3 * 1.3); |
發表人: | kourge [ 2008-04-12, 13:13 ] |
文章主題 : | |
原因是因為 JavaScript 的數字是「雙精確度 64 位元格式 IEEE 754 值」。 |
發表人: | 翔風 [ 2008-04-13, 23:35 ] |
文章主題 : | |
(呆掉的某人) 雙精確度 64 位元 居然比不上 兒童精確度人腦位元 ![]() ![]() |
發表人: | Dark Shenada [ 2008-04-14, 03:40 ] |
文章主題 : | |
Amauds 寫: 不太清楚JAVASCRIPT的運算邏輯,
3000*21.3-91-192=63617 3000*21.4-91-192=63916.99999999999 3000*10.1-43-91=30166 3000*10.2-43-91=30465.999999999996 這是硬體或系統的錯誤呢? Windows XP sp2 + Firefox 2.0.0.13 Windows XP sp2 + Internet Explorer 7.0 雖然知道你在寫什麼, 但是 如果有人在我手上的project commit這種不加括號 在, 連續使用運算子的算式裡, 一定直接reverse處理, 外加梟首示眾, 雖然OP順序上沒有爭議, 但是這種寫 法本身就不具可讀性, 對一個多人的project來說就 是浪費所有人的時間, 又或是萬不一, 有人需要修改 又沒太多時間時, 就有可能發生誤解的狀況..... (多加一些括號累得又不是你, 是compiler/interpreter, 別那麼吝嗇使用括號阿 ORZ) |
發表人: | legnaleurc [ 2008-04-14, 11:44 ] |
文章主題 : | |
翔風 寫: (呆掉的某人) 雙精確度 64 位元 居然比不上 兒童精確度人腦位元 ![]() ![]() 這算是非戰之罪吧 十位數的小數點對計算機來說 有時很像人類在算三分圓的情形 只是人類比較習慣用十進位而已 Dark Shenada 寫: 雖然知道你在寫什麼, 但是
如果有人在我手上的project commit這種不加括號 在, 連續使用運算子的算式裡, 一定直接reverse處理, 外加梟首示眾, 雖然OP順序上沒有爭議, 但是這種寫 法本身就不具可讀性, 對一個多人的project來說就 是浪費所有人的時間, 又或是萬不一, 有人需要修改 又沒太多時間時, 就有可能發生誤解的狀況..... (多加一些括號累得又不是你, 是compiler/interpreter, 別那麼吝嗇使用括號阿 ORZ) 沒這麼嚴重吧.... 不過是舉例而已 而且有時太多括號反而有礙觀瞻 像是C的pointer of function寫到極致的時候 |
發表人: | Dark Shenada [ 2008-04-15, 06:46 ] |
文章主題 : | |
legnaleurc 寫: 沒這麼嚴重吧....
不過是舉例而已 而且有時太多括號反而有礙觀瞻 像是C的pointer of function寫到極致的時候 嗯, 因為昨天我手上的project中的member, 剛發生了一件由不括號引發的血案, 由於是發生在 用來傳遞signal 的share memory中, 害的所有關係人 都沒得睡, 所以 ..... 有點過度敏感了 (汗) p.s: 直到剛才還在review (41個小時了) ..... 還我睡眠來 (口孔) pointer of function寫到極致時還是可以用空白, 換行, 縮排, macro和增加變數來處理, 多人開發時可讀性是最重要的, 如果不必要寫在一行的就不因該寫在一行, 能分成多個敘述 的就以語意和方便閱讀為原則分拆 把一堆code寫在一行執行上"不會"比較快, 寫的人也不會比較厲害, 只是增加同伴和以後維護 的人的困擾 |
發表人: | legnaleurc [ 2008-04-19, 16:14 ] |
文章主題 : | |
個人覺得啦 很多時候"一段註解"比"十對括號"還來得有幫助 |
發表人: | Amauds [ 2008-04-19, 20:16 ] |
文章主題 : | |
非常感謝各位的回答,最近筆電內建網卡一直有問題, 沒能很快回應大家,深感抱歉。 太久沒摸程式,我想知道的是,除去所謂括號的問題之外, 同樣的問題在其它程式語言發生的機率大不大? 之前的例子並非刻意找出來的,只是在一個很小的股票報酬率計算程式中引發的,而資料量還不到 150 筆,如果資料量更大,那出錯的機率一定會更大,這個程式等同無效,因為根本算不出正確的金額,那報酬率也就不用算了。 |
發表人: | legnaleurc [ 2008-04-19, 22:25 ] |
文章主題 : | |
很常發生啊 C就常會有5平方等於24的結果(用math.h的pow) 修正的方法大部分都是用很dirty的方式進位或捨棄 但是如果保持在浮點數不去轉型成整數的話 我通常都不太理它的 0.000000000000001的誤差實在是.... |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |