標題:
(a + 1) 恆 大於 a ???
[打印本頁]
作者:
sjgau
時間:
2013-10-24 20:32
標題:
(a + 1) 恆 大於 a ???
在 數學上
(a + 1) 恆 大於 a ,
但是,任何 電腦語言,包刮 VBA
以下的 程式設計片段
double a, b, c;
a= 1.23;
b= a + 1;
while (b > a) do begin
a= a*1.001;
b= a + 1;
end;
// b <= a, ???
print a, b
// why????
作者:
sunnyso
時間:
2013-10-24 22:19
回復
1#
sjgau
:o 想知道爲什麼. 請解說.
作者:
sunnyso
時間:
2013-10-25 10:35
回復
2#
sunnyso
請賜教. 為什麼呢? 很想知道.
作者:
sjgau
時間:
2013-10-25 11:02
Sub test1052()
Dim a As Single, b As Single
a = 1.23
b = a + 1
' b > a
While (b > a)
a = a * 1.001
b = a + 1
Wend
' b < a, why???
Cells(3, 1) = a
Cells(4, 1) = b
' a= b= 16781740, why???
MsgBox ("Done!")
End Sub
複製代碼
作者:
sjgau
時間:
2013-10-25 11:04
回復
3#
sunnyso
因為,single 的福點數是 四個byte, 32個bits,
使用 23個 bits 表示 數字的精確度,
2^23 --> no
把 0.5 到 1.0 切割成為 no 等分,
所以,精確度就是 1/no
作者:
sjgau
時間:
2013-10-25 11:07
Sub test1052()
Dim a As Double, b As Double
a = 1.23
b = a + 1
' b > a
While (b > a)
a = a * 1.001
b = a + 1
Wend
' b < a, why???
Cells(3, 1) = a
Cells(4, 1) = b
' a= b= 9.01577E+15, why???
MsgBox ("Done!")
End Sub
作者:
sjgau
時間:
2013-10-25 11:09
如果是 ,double 的福點數是 八個byte, 64個bits,
使用 52個 bits 表示 數字的精確度,
2^53 --> no
把 0.5 到 1.0 切割成為 no 等分,
所以,精確度就是 1/no
作者:
stillfish00
時間:
2013-10-25 11:15
回復
3#
sunnyso
你可以先想想 Single 只有32位元為何最大可表示到 3.402823E38。
可參考 IEEE 754 http://zh.wikipedia.org/wiki/IEEE_754
作者:
sunnyso
時間:
2013-10-25 13:48
感謝三位大大熱心解說. 很受教
作者:
sjgau
時間:
2013-10-30 17:38
回復
9#
sunnyso
也可以過去 本討論區
C語言程式設計板板 看看
作者:
sunnyso
時間:
2013-10-30 23:29
回復
10#
sjgau
感謝指引
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)