[問題] 有關數字運算一個很小的大問題

看板C_and_CPP (C/C++)作者 (兌現承諾)時間16年前 (2009/03/12 22:05), 編輯推噓3(307)
留言10則, 6人參與, 最新討論串1/1
我遇到的情形如下 NormSquare=sum*(1/1024); 其中sum約為10e-25 這樣編寫把NormSquare cout出來後顯是為0 如果這樣編寫 NormSquare=sum/1024; cout顯示約為10e-14 我不明白其中的道理 為什麼會這樣呢? 做數值運算通常就照這數學式key in 這種隱形殺手實在太恐怖了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.11.75

03/12 22:12, , 1F
1/1024 => 整數除以整數 => 0, 若有需要請強制轉型:)
03/12 22:12, 1F

03/12 22:12, , 2F
猜測 (1/1024) =>整數除法,所以是0
03/12 22:12, 2F

03/12 22:13, , 3F
可以寫(1.0/1024)
03/12 22:13, 3F

03/12 22:13, , 4F
sum/1024 你的sum應該不是int型態
03/12 22:13, 4F

03/12 22:22, , 5F
嗯 我的sum是double
03/12 22:22, 5F

03/12 22:23, , 6F
謝謝大家
03/12 22:23, 6F

03/12 22:44, , 7F
請念數值方法…
03/12 22:44, 7F

03/13 00:44, , 8F
數值分析裡面應該有提到
03/13 00:44, 8F

03/13 09:20, , 9F
我想只是新手分不清楚 1 和 1.0 的差別吧
03/13 09:20, 9F

03/13 09:21, , 10F
連在FORTRAN都有1.(為了簡短連屁股的 0 都省)的習慣
03/13 09:21, 10F
文章代碼(AID): #19kHQQx_ (C_and_CPP)
文章代碼(AID): #19kHQQx_ (C_and_CPP)