返回列表 上一主題 發帖

(a + 1) 恆 大於 a ???

(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????
天下為公

回復 1# sjgau


    :o  想知道爲什麼. 請解說.
ss

TOP

回復 2# sunnyso

請賜教. 為什麼呢? 很想知道.
ss

TOP

  1. Sub test1052()
  2.    Dim a As Single, b As Single
  3.    a = 1.23
  4.    b = a + 1
  5.    ' b > a
  6.    
  7.    While (b > a)
  8.       a = a * 1.001
  9.       b = a + 1
  10.       
  11.    Wend
  12.    ' b < a, why???
  13.    
  14.    Cells(3, 1) = a
  15.    Cells(4, 1) = b
  16.    ' a= b= 16781740, why???
  17.    

  18.    MsgBox ("Done!")
  19.    
  20.    
  21.    

  22. End Sub
複製代碼
天下為公

TOP

回復 3# sunnyso

因為,single 的福點數是 四個byte, 32個bits,
使用 23個 bits 表示 數字的精確度,

2^23 --> no
把 0.5 到 1.0 切割成為 no 等分,
所以,精確度就是 1/no
天下為公

TOP

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
天下為公

TOP

如果是 ,double 的福點數是 八個byte, 64個bits,
使用 52個 bits 表示 數字的精確度,

2^53 --> no
把 0.5 到 1.0 切割成為 no 等分,
所以,精確度就是 1/no
天下為公

TOP

回復 3# sunnyso
你可以先想想 Single 只有32位元為何最大可表示到 3.402823E38。
可參考 IEEE 754  http://zh.wikipedia.org/wiki/IEEE_754

TOP

感謝三位大大熱心解說. 很受教
ss

TOP

回復 9# sunnyso


    也可以過去 本討論區
C語言程式設計板板 看看
天下為公

TOP

        靜思自在 : 【時間成就一切】時間可以造就人格,可以成就事業,也可以儲積功德。
返回列表 上一主題