- cpython/Objects/floatobject.c
- cpython/Include/floatobject.h
- cpython/Objects/clinic/floatobject.c.h
PyFloatObject 仅仅是一层对 c 语言中双精度浮点数的包装(double), 一个双精度浮点数使用8个字节去表示一个浮点数
详细的内容可以参考 IEEE 754/IEEE-754标准与浮点数运算
0.0 使用 IEEE 754 标准的表示方式为 64 个为 0 的 bit
f = 0.0
f = 1.0
f = 0.1
1.1 和 0.1 的区别是指数位最后的几个位不相同
-0.1 和 0.1 的区别是第一个符号位不相同
#ifndef PyFloat_MAXFREELIST
#define PyFloat_MAXFREELIST 100
#endif
static int numfree = 0;
static PyFloatObject *free_list = NULL;
free_list 是一个单链表, 最多存储 PyFloat_MAXFREELIST 个 PyFloatObject
单链表通过 ob_type 字段串联起来
>>> f = 0.0
>>> id(f)
4551393664
>>> f2 = 1.0
>>> id(f2)
4551393616
del f
del f2
f3 取自 free_list 的表头
>>> f3 = 3.0
>>> id(f3)
4551393616