2007年09月12日 星期三 11:02
On 9/12/07, limodou <limodou在gmail.com> wrote: > On 9/12/07, Yuheng Hu <wonderfulhoo在gmail.com> wrote: > > 那个人能解释下编译器处理4.01 == 4.01的过程? > > > 一个浮点数的直接表式规则是相同的,我没有看过Python的源代码,但是我想可能就是直接转为C的double或float类型,如: > > (double)4.01 == (double)4.01 > > 底层的C的处理是一致的,python也就是一致的. > 在python的底层,float对象是这样的: typedef struct { PyObject_HEAD double ob_fval; } PyFloatObject; 数据是放在那个double型的ob_fval中的。 -- Best Regards, Leo Jay
2007年09月12日 星期三 11:05
On 9/12/07, Leo Jay <python.leojay在gmail.com> wrote: > On 9/12/07, limodou <limodou在gmail.com> wrote: > > On 9/12/07, Yuheng Hu <wonderfulhoo在gmail.com> wrote: > > > 那个人能解释下编译器处理4.01 == 4.01的过程? > > > > > 一个浮点数的直接表式规则是相同的,我没有看过Python的源代码,但是我想可能就是直接转为C的double或float类型,如: > > > > (double)4.01 == (double)4.01 > > > > 底层的C的处理是一致的,python也就是一致的. > > > > 在python的底层,float对象是这样的: > typedef struct { > PyObject_HEAD > double ob_fval; > } PyFloatObject; > > 数据是放在那个double型的ob_fval中的。 > 多谢,没读过源码,呵呵. -- I like python! UliPad <>: http://code.google.com/p/ulipad/ My Blog: http://www.donews.net/limodou
2007年09月12日 星期三 11:23
多谢提供源码,原来是double。。。 刚刚google来的: 根据Intel的文档的描述,双精度浮点的精度是53位,去掉1位,还有52位,总共还有12位可以给符号位以及指数位使用,符号位占据1位,剩下11位给指数位使用。而范围则是从2^(-1022)到2^(1023),换算成十进制,是2.23*10^(-308)到1.79*10^(308) 那对于某些无法用2进制表示的数,如:0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 即0.011010101010101010101010101010101010101010101...010 换算成10进制,在被double的精度截取。估计就产生误差了 在 07-9-12,limodou<limodou在gmail.com> 写道: > On 9/12/07, Leo Jay <python.leojay在gmail.com> wrote: > > On 9/12/07, limodou <limodou在gmail.com> wrote: > > > On 9/12/07, Yuheng Hu <wonderfulhoo在gmail.com> wrote: > > > > 那个人能解释下编译器处理4.01 == 4.01的过程? > > > > > > > 一个浮点数的直接表式规则是相同的,我没有看过Python的源代码,但是我想可能就是直接转为C的double或float类型,如: > > > > > > (double)4.01 == (double)4.01 > > > > > > 底层的C的处理是一致的,python也就是一致的. > > > > > > > 在python的底层,float对象是这样的: > > typedef struct { > > PyObject_HEAD > > double ob_fval; > > } PyFloatObject; > > > > 数据是放在那个double型的ob_fval中的。 > > > 多谢,没读过源码,呵呵. > > -- > I like python! > UliPad <>: http://code.google.com/p/ulipad/ > My Blog: http://www.donews.net/limodou > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese -- Regards, Yuheng Hu
2007年09月12日 星期三 13:43
static PyObject *i; i = PyFloat_FromDouble(1.9); 在 07-9-12,Leo Jay<python.leojay at gmail.com> 写道: > 在python的底层,float对象是这样的: > typedef struct { > PyObject_HEAD > double ob_fval; > } PyFloatObject; > > 数据是放在那个double型的ob_fval中的。 >
Zeuux © 2025
京ICP备05028076号