Python论坛  - 讨论区

标题:[python-chinese] 一个基础又奇怪的问题,关于浮点数

2007年09月12日 星期三 11:02

Leo Jay python.leojay在gmail.com
星期三 九月 12 11:02:03 HKT 2007

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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月12日 星期三 11:05

limodou limodou在gmail.com
星期三 九月 12 11:05:46 HKT 2007

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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月12日 星期三 11:23

Yuheng Hu wonderfulhoo在gmail.com
星期三 九月 12 11:23:50 HKT 2007

多谢提供源码,原来是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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月12日 星期三 13:43

Jiahua Huang jhuangjiahua在gmail.com
星期三 九月 12 13:43:32 HKT 2007

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中的。
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号