1

http://docs.python.org/2/library/math.htmlから:

math.frexp(x)

x の仮数と指数をペア (m, e) として返します。m は floatで、e はx == m * 2**e と正確に一致する整数です。x がゼロの場合は (0.0, 0) を返し、それ以外の場合は 0.5 <= abs(m) < 1 を返します。これは、float の内部表現を移植可能な方法で「分解」するために使用されます。

math.modf(x)

x の小数部分と整数部分を返します。どちらの結果も x の符号を持ち、floatです。

この関連する質問では、フロートを返すことは ceil と floor では意味がないことが指摘されているため、Python 3 では整数を返すように変更されました。modfの整数結果も整数として返されない理由はありますか? Python 2.7 では:

In [2]: math.floor(5.5)
Out[2]: 5.0

In [3]: math.modf(5.5)
Out[3]: (0.5, 5.0)

In [4]: math.frexp(5.5)
Out[4]: (0.6875, 3)

Python 3 では:

In [2]: math.floor(5.5)
Out[2]: 5

In [3]: math.modf(5.5)
Out[3]: (0.5, 5.0)

In [4]: math.frexp(5.5)
Out[4]: (0.6875, 3)
4

1 に答える 1

8

ほとんどのmathモジュール関数は、C 言語標準で定義された同じ名前の関数のシン ラッパーです。 frexp()modf()はそのようなもので、同じ名前の C 関数が返すものと同じものを返します。

したがって、これの一部は、言語間操作の容易さです。

しかし、別の部分は実用性です。

>>> from math import modf
>>> modf(1e100)
(0.0, 1e+100)

10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 を「整数部分」として戻したいですか?

C は無制限の整数を持たないため、おそらくそうすることができません。Python は単純にそうしたくありません;-)十分な大きさのすべての浮動小数点値は正確な整数であることに注意してください。

于 2013-10-12T00:34:13.000 に答える