浮動小数点オブジェクト

type PyFloatObject

この PyObject のサブタイプは Python の浮動小数点オブジェクトを表します。

PyTypeObject PyFloat_Type
次に属します: Stable ABI.

この PyTypeObject のインスタンスは Python の浮動小数点型を表します。 Python レベルの float と同じオブジェクトです。

int PyFloat_Check(PyObject *p)

引数が PyFloatObject か PyFloatObject のサブタイプであるときに真を返します。この関数は常に成功します。

int PyFloat_CheckExact(PyObject *p)

引数が PyFloatObject であるが PyFloatObject のサブタイプでないときに真を返します。この関数は常に成功します。

PyObject *PyFloat_FromString(PyObject *str)
戻り値: 新しい参照。 次に属します: Stable ABI.

str の文字列値をもとに PyFloatObject オブジェクトを生成します。失敗すると NULL を返します。

PyObject *PyFloat_FromDouble(double v)
戻り値: 新しい参照。 次に属します: Stable ABI.

v から PyFloatObject オブジェクトを生成して返します。 失敗すると NULL を返します。

double PyFloat_AsDouble(PyObject *pyfloat)
次に属します: Stable ABI.

pyfloat の値を C の double で返します。 pyfloat が Python の浮動小数点オブジェクトでなく、__float__() メソッドを持つ場合は、まずそのメソッドを呼び出して pyfloat を float に変換します。 __float__() が定義されていなければ __index__() を使います。 失敗した場合は -1.0 を返すので、PyErr_Occurred() を呼び出してエラーの有無を確認する必要があります。

バージョン 3.8 で変更: 可能であれば __index__() を使うようになりました。

double PyFloat_AS_DOUBLE(PyObject *pyfloat)

pyfloat の指す値を、 C の double 型表現で返しますが、エラーチェックを行いません。

PyObject *PyFloat_GetInfo(void)
戻り値: 新しい参照。 次に属します: Stable ABI.

float の精度、最小値、最大値に関する情報を含む structseq インスタンスを返します。これは、 float.h ファイルの薄いラッパーです。

double PyFloat_GetMax()
次に属します: Stable ABI.

表現できる最大の有限の浮動小数点数 DBL_MAX を C の double として返します。

double PyFloat_GetMin()
次に属します: Stable ABI.

float の正規化された最小の正の値 DBL_MIN を C の double 型で返します。

Py_INFINITY

正の無限大を表す double 型の定数式に展開されるマクロです。

C11 標準の <math.h> ヘッダの INFINITY マクロと同等です。

バージョン 3.15 で ソフト非推奨 <Soft deprecated>.

Py_NAN

静かな非数 (qNaN) を表す double 型の定数式に展開されるマクロです。

ほとんどのプラットフォームでは、C11 標準の <math.h> ヘッダの NAN マクロと同等です。

Py_HUGE_VAL

INFINITY と同等です。

バージョン 3.14 で ソフト非推奨 <Soft deprecated>.

Py_MATH_E

math.e 定数の定義です (double 型の精度)。

Py_MATH_El

e 定数の高精度 (long double) の定義です。

バージョン 3.15 で非推奨、バージョン 3.20 で削除予定.

Py_MATH_PI

math.pi 定数の定義です (double 型の精度)。

Py_MATH_PIl

pi 定数の高精度 (long double) の定義です。

バージョン 3.15 で非推奨、バージョン 3.20 で削除予定.

Py_MATH_TAU

math.tau 定数の定義です (double 型の精度)。

Added in version 3.6.

Py_RETURN_NAN

関数から math.nan を返します。

ほとんどのプラットフォームでは、return PyFloat_FromDouble(NAN) と同等です。

Py_RETURN_INF(sign)

sign の符号に応じて、関数から math.inf または -math.inf を返します。

ほとんどのプラットフォームでは、次と同等です。

return PyFloat_FromDouble(copysign(INFINITY, sign));
Py_IS_FINITE(X)

指定された浮動小数点数 X が有限、つまり正規化数、非正規化数、ゼロのいずれかであり、無限大や NaN でなければ 1 を返します。 それ以外の場合は 0 を返します。

バージョン 3.14 で ソフト非推奨 <Soft deprecated>: 代わりに isfinite を使ってください。

Py_IS_INFINITY(X)

指定された浮動小数点数 X が正または負の無限大の場合に 1 を返します。 それ以外の場合は 0 を返します。

バージョン 3.14 で ソフト非推奨 <Soft deprecated>: 代わりに isinf を使ってください。

Py_IS_NAN(X)

指定された浮動小数点数 X が非数 (NaN) の場合に 1 を返します。 それ以外の場合は 0 を返します。

バージョン 3.14 で ソフト非推奨 <Soft deprecated>: 代わりに isnan を使ってください。

パック関数とアンパック関数

パック関数とアンパック関数は、浮動小数点数をバイト列として格納するための、効率的でプラットフォームに依存しない方法を提供します。 パック関数は C の double からバイト列を作成し、アンパック関数はそのバイト列から C の double を作成します。 接尾辞 (2、4、8) はバイト列のバイト数を表します。

  • 2 バイト形式は IEEE 754 binary16 半精度形式です。

  • 4 バイト形式は IEEE 754 binary32 単精度形式です。

  • 8 バイト形式は IEEE 754 binary64 倍精度形式です。

32 ビットモードの x86 システムなど、一部のプラットフォームでは、アンパック時に NaN の種類が保持されないことがあります (シグナリング NaN が静かな NaN になります)。

double 型は IEEE 754 binary64 倍精度形式であると仮定しています。 そうでない場合の動作は、残念ながら一部が偶然に左右されます。 IEEE 形式でなく、IEEE 754 よりも精度やダイナミックレンジが大きいプラットフォームでは、パックできない値があります。 逆に精度やダイナミックレンジが小さいプラットフォームでは、アンパックできない値があります。 INF や NaN のような特殊な数値 (そのプラットフォームに存在する場合) のパックは、正しく処理されないことがあります。 また、IEEE の INF や NaN を含むバイト列をアンパックしようとすると例外が発生することがあります。

Added in version 3.11.

パック関数

パック関数は p を先頭として 2、4、8 バイトを書き込みます。 le は int 型の引数で、リトルエンディアン形式 (指数部が末尾の p+1、p+3、または p+6 と p+7 にある形式) にする場合は非ゼロ、ビッグエンディアン形式 (指数部が先頭の p にある形式) にする場合はゼロを指定します。 ネイティブのエンディアンを選ぶには PY_LITTLE_ENDIAN 定数を使ってください。 この定数は、ビッグエンディアンのプロセッサでは 0、リトルエンディアンのプロセッサでは 1 です。

戻り値は、成功した場合は 0、エラーの場合は -1 です (例外も設定され、通常は OverflowError です)。

int PyFloat_Pack2(double x, char *p, int le)

C の double を IEEE 754 binary16 半精度形式にパックします。

int PyFloat_Pack4(double x, char *p, int le)

C の double を IEEE 754 binary32 単精度形式にパックします。

int PyFloat_Pack8(double x, char *p, int le)

C の double を IEEE 754 binary64 倍精度形式にパックします。

アンパック関数

アンパック関数は p を先頭として 2、4、8 バイトを読み取ります。 le は int 型の引数で、バイト列がリトルエンディアン形式 (指数部が末尾の p+1、p+3、または p+6 と p+7 にある形式) なら非ゼロ、ビッグエンディアン形式 (指数部が先頭の p にある形式) ならゼロを指定します。 ネイティブのエンディアンを選ぶには PY_LITTLE_ENDIAN 定数を使ってください。 この定数は、ビッグエンディアンのプロセッサでは 0、リトルエンディアンのプロセッサでは 1 です。

戻り値は、アンパックした double です。 エラーの場合は -1.0 を返し、PyErr_Occurred() が真になります (例外も設定され、通常は OverflowError です)。

double PyFloat_Unpack2(const char *p, int le)

IEEE 754 binary16 半精度形式を C の double にアンパックします。

double PyFloat_Unpack4(const char *p, int le)

IEEE 754 binary32 単精度形式を C の double にアンパックします。

double PyFloat_Unpack8(const char *p, int le)

IEEE 754 binary64 倍精度形式を C の double にアンパックします。