8

私は奇妙なケースに落ちました。Pyson からここに投稿された 3 つのソリューションのいずれかを試しまし。この浮動小数点 1.15898324042702949299155079643242061138153076171875 に着地すると、3 つのソリューションはすべて奇妙な動作を示します。

次のコードがあるとしましょう:

import numpy as np
from __future__ import division

a = 1.15898324042702949299155079643242061138153076171875
b = 0
b = np.nextafter(a,1)
print a, b

何らかの理由で、b可能な限り最小量だけ増加するのではなく、減少します。何故ですか?

ここで私が遊んでから得たいくつかの簡単な結果があります:

In [12]: a = 1.15898324042702949299155079643242061138153076171875

In [13]: a
Out[13]: 1.1589832404270295

In [14]: numpy.nextafter(a,1)
Out[14]: 1.1589832404270293

In [15]: numpy.nextafter(a,-1)
Out[15]: 1.1589832404270293
4

1 に答える 1

12

ドキュメントから(強調鉱山):

nextafter(x1, x2[, out])

Return the next representable floating-point value after x1 **in the direction
of x2 element-wise**.

2 番目の引数は +/-1 で指定される方向ではなく、目指す値です。

In [12]: a = 1.15898324042702949299155079643242061138153076171875

In [13]: a
Out[13]: 1.1589832404270295

In [14]: numpy.nextafter(a, 0)
Out[14]: 1.1589832404270293

In [15]: numpy.nextafter(a, 1)
Out[15]: 1.1589832404270293

In [16]: numpy.nextafter(a, 1.16)
Out[16]: 1.1589832404270297

In [17]: numpy.nextafter(a, 2)
Out[17]: 1.1589832404270297
于 2012-11-09T02:08:14.603 に答える