- cpython/Objects/floatobject.c
- cpython/Include/floatobject.h
- cpython/Objects/clinic/floatobject.c.h
PyFloatObject is simply a wrapper around the C type double, which takes 8 bytes to represent a floating-point number
you can refer to IEEE 754/IEEE-754标准与浮点数运算 for more detail
The binary representation of 0.0 in IEEE 754 format is 64 zero bits
f = 0.0f = 1.0f = 0.1The difference between 1.1 and 0.1 is the last few exponent bits
The difference between -0.1 and 0.1 is the first sign bit
#ifndef PyFloat_MAXFREELIST
#define PyFloat_MAXFREELIST 100
#endif
static int numfree = 0;
static PyFloatObject *free_list = NULL;free_list is a singly linked list that stores at most PyFloat_MAXFREELIST PyFloatObjects
The linked list is linked via the ob_type field
>>> f = 0.0
>>> id(f)
4551393664
>>> f2 = 1.0
>>> id(f2)
4551393616
del f
del f2f3 comes from the head of the free_list
>>> f3 = 3.0
>>> id(f3)
4551393616







