Skip to content

Latest commit

 

History

History
111 lines (71 loc) · 2.38 KB

float_cn.md

File metadata and controls

111 lines (71 loc) · 2.38 KB

floatimage title

目录

相关位置文件

  • cpython/Objects/floatobject.c
  • cpython/Include/floatobject.h
  • cpython/Objects/clinic/floatobject.c.h

内存构造

PyFloatObject 仅仅是一层对 c 语言中双精度浮点数的包装(double), 一个双精度浮点数使用8个字节去表示一个浮点数

详细的内容可以参考 IEEE 754/IEEE-754标准与浮点数运算

layout

示例

0

0.0 使用 IEEE 754 标准的表示方式为 64 个为 0 的 bit

f = 0.0

0

1.0

f = 1.0

1

0.1

f = 0.1

0.1

1.1

1.1 和 0.1 的区别是指数位最后的几个位不相同

1.1

-0.1

-0.1 和 0.1 的区别是第一个符号位不相同

-0.1

free_list

#ifndef PyFloat_MAXFREELIST
#define PyFloat_MAXFREELIST    100
#endif
static int numfree = 0;
static PyFloatObject *free_list = NULL;

free_list 是一个单链表, 最多存储 PyFloat_MAXFREELISTPyFloatObject

free_list

单链表通过 ob_type 字段串联起来

>>> f = 0.0
>>> id(f)
4551393664
>>> f2 = 1.0
>>> id(f2)
4551393616
del f
del f2

free_list2

f3 取自 free_list 的表头

>>> f3 = 3.0
>>> id(f3)
4551393616

free_list3