5

このようなものを見たことがない。単純な while ループ:

t_end = 100.0
t_step= 0.1
time = 0

while time<=t_end:
    time+=t_step
    print time

最後に印刷された 3 つの値:

...
99.9
100.0
100.1

私には正しいように見えます。

ここで、t_step を 0.01 に変更します。

t_end = 100.0
t_step= 0.01
time = 0

while time<=t_end:
    time+=t_step
    print time

最後に印刷された 3 つの値:

...
99.98
99.99
100.0

質問: time = t_end =100.0 のときに最終ループに進まないのはなぜですか?

代替ソリューションは何ですか?

4

3 に答える 3

10

この 100.0 (合計の結果) は 100.0 よりも大きくなる可能性があるため、手動で記述します。浮動小数点数が等しいかどうかを比較するべきではありません...

あなたはこれを読むべきです:

すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

考えられる解決策:

>>> t_end = 100.0
>>> t_step = 0.01
>>> total = int(t_end/t_step)
>>> for x in itertools.accumulate((t_step for i in range(total + 1))):
    print(x)

したがって、最後の要素は次のようになります: 100.01000000001426

于 2012-08-27T18:23:46.127 に答える
6

浮動小数点丸めエラー。これは、最後の 3 つの値に対して取得したものです。

99.98000000001424
99.99000000001425
100.00000000001425
于 2012-08-27T18:23:43.363 に答える
4

これは、浮動小数点計算の不正確さが原因です。== 演算子を使用して 2 つの浮動小数点値を比較していますが、これは使用できません。「100.0」と表示されているものは、実際には「100.000000000314」のようなものである可能性があります

于 2012-08-27T18:24:51.893 に答える