Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2265 / 13646 ツリー ←次へ | 前へ→

【69066】for next を倍精度で回す チェリィ 11/5/14(土) 0:44 質問[未読]
【69068】Re:for next を倍精度で回す jyun 11/5/14(土) 1:37 回答[未読]
【69073】Re:for next を倍精度で回す チェリィ 11/5/14(土) 10:44 お礼[未読]

【69066】for next を倍精度で回す
質問  チェリィ  - 11/5/14(土) 0:44 -

引用なし
パスワード
   Sub test()
Dim i As Double
For i = -10 To 10 Step 0.1
  Debug.Print i
Next
End Sub
を実行すると
デバッグウインドウの-8.7から先が
-8.60000000000001
-8.50000000000001
-8.40000000000001
のように、0000000000001 が余計についてしまいます。
なぜこのようなことが起こるのでしょうか。
0.1は2進数にすると循環小数になるからでしょうか?
こういうトラブルはプロのシステムエンジニアさんには常識でしょうか?
こんなことでつまづいて1日を無駄にした私はSE失格でしょうか?

【69068】Re:for next を倍精度で回す
回答  jyun  - 11/5/14(土) 1:37 -

引用なし
パスワード
   ▼チェリィ さん:
>なぜこのようなことが起こるのでしょうか。

こちらが参考になるでしょう。
小数を使用した計算の誤差について
ht tp://support.microsoft.com/default.aspx?scid=kb;ja;813530

>こういうトラブルはプロのシステムエンジニアさんには常識でしょうか?

こういうトラブルを避けるのが常識でしょう。
For counter = start To end [Step step]

For...Next ステートメントの構文で counter、start、end、step等の
変数・定数は整数(Long)を使うのが普通だと思います。
で、先のコードは iをLongにして、-10、10、0.1はそれぞれ10倍して
 For i = -100 To 100 Step 1
とし、
  Debug.Print i / 10
とすれば望む結果が得られるでしょう。

【69073】Re:for next を倍精度で回す
お礼  チェリィ  - 11/5/14(土) 10:44 -

引用なし
パスワード
   やはり浮動小数点の問題なのですね。
ありがとうございました。

2265 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free