MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-10-14, 02:42

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 11 篇文章 ] 
發表人 內容
 文章主題 : JAVASCRIPT
文章發表於 : 2008-04-11, 23:37 
離線
頭像

註冊時間: 2005-02-24, 19:15
文章: 1037
來自: Taiwan
不太清楚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

_________________
Amauds's Firefox
曾經妳以為最可靠的依賴;其實從未曾真實的存在過。
圖檔圖檔


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-12, 00:14 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
浮點數的精準度問題吧
很多語言都會有的

_________________
以下為簽名檔
半荒廢日誌....

Foolproof Project:
KomiX 漫畫瀏覽
Khopper 音樂轉檔

就算你百分之一百認定某人是渣滓中的渣滓,請仍然展示你的冷靜、體諒、尊重。


回頂端
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 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);


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-12, 13:13 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
原因是因為 JavaScript 的數字是「雙精確度 64 位元格式 IEEE 754 值」

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-13, 23:35 
離線

註冊時間: 2005-07-27, 17:24
文章: 240
(呆掉的某人)
雙精確度 64 位元
居然比不上
兒童精確度人腦位元 :lol: :lol:


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9pre) Gecko/2008040907 Minefield/3.0pre
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-14, 03:40 
離線
頭像

註冊時間: 2003-10-27, 02:07
文章: 380
來自: Taipei, Taiwan
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)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-14, 11:44 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
翔風 寫:
(呆掉的某人)
雙精確度 64 位元
居然比不上
兒童精確度人腦位元 :lol: :lol:


這算是非戰之罪吧
十位數的小數點對計算機來說
有時很像人類在算三分圓的情形
只是人類比較習慣用十進位而已

Dark Shenada 寫:
雖然知道你在寫什麼, 但是
如果有人在我手上的project commit這種不加括號
在, 連續使用運算子的算式裡, 一定直接reverse處理,
外加梟首示眾, 雖然OP順序上沒有爭議, 但是這種寫
法本身就不具可讀性, 對一個多人的project來說就
是浪費所有人的時間, 又或是萬不一, 有人需要修改
又沒太多時間時, 就有可能發生誤解的狀況.....
(多加一些括號累得又不是你, 是compiler/interpreter,
別那麼吝嗇使用括號阿 ORZ)


沒這麼嚴重吧....
不過是舉例而已
而且有時太多括號反而有礙觀瞻
像是C的pointer of function寫到極致的時候

_________________
以下為簽名檔
半荒廢日誌....

Foolproof Project:
KomiX 漫畫瀏覽
Khopper 音樂轉檔

就算你百分之一百認定某人是渣滓中的渣滓,請仍然展示你的冷靜、體諒、尊重。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-15, 06:46 
離線
頭像

註冊時間: 2003-10-27, 02:07
文章: 380
來自: Taipei, Taiwan
legnaleurc 寫:
沒這麼嚴重吧....
不過是舉例而已
而且有時太多括號反而有礙觀瞻
像是C的pointer of function寫到極致的時候


嗯, 因為昨天我手上的project中的member,
剛發生了一件由不括號引發的血案, 由於是發生在
用來傳遞signal 的share memory中, 害的所有關係人
都沒得睡, 所以 ..... 有點過度敏感了 (汗)

p.s: 直到剛才還在review (41個小時了) ..... 還我睡眠來 (口孔)

pointer of function寫到極致時還是可以用空白, 換行, 縮排, macro和增加變數來處理,
多人開發時可讀性是最重要的, 如果不必要寫在一行的就不因該寫在一行, 能分成多個敘述
的就以語意和方便閱讀為原則分拆

把一堆code寫在一行執行上"不會"比較快, 寫的人也不會比較厲害, 只是增加同伴和以後維護
的人的困擾


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-19, 16:14 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
個人覺得啦
很多時候"一段註解"比"十對括號"還來得有幫助

_________________
以下為簽名檔
半荒廢日誌....

Foolproof Project:
KomiX 漫畫瀏覽
Khopper 音樂轉檔

就算你百分之一百認定某人是渣滓中的渣滓,請仍然展示你的冷靜、體諒、尊重。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-19, 20:16 
離線
頭像

註冊時間: 2005-02-24, 19:15
文章: 1037
來自: Taiwan
非常感謝各位的回答,最近筆電內建網卡一直有問題,
沒能很快回應大家,深感抱歉。

太久沒摸程式,我想知道的是,除去所謂括號的問題之外,
同樣的問題在其它程式語言發生的機率大不大?
之前的例子並非刻意找出來的,只是在一個很小的股票報酬率計算程式中引發的,而資料量還不到 150 筆,如果資料量更大,那出錯的機率一定會更大,這個程式等同無效,因為根本算不出正確的金額,那報酬率也就不用算了。

_________________
Amauds's Firefox
曾經妳以為最可靠的依賴;其實從未曾真實的存在過。
圖檔圖檔


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-04-19, 22:25 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
很常發生啊
C就常會有5平方等於24的結果(用math.h的pow)
修正的方法大部分都是用很dirty的方式進位或捨棄

但是如果保持在浮點數不去轉型成整數的話
我通常都不太理它的
0.000000000000001的誤差實在是....

_________________
以下為簽名檔
半荒廢日誌....

Foolproof Project:
KomiX 漫畫瀏覽
Khopper 音樂轉檔

就算你百分之一百認定某人是渣滓中的渣滓,請仍然展示你的冷靜、體諒、尊重。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 11 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 41 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群