python的float.\uuuueq\uuuuuuuuuuuuuuuuuuuuuuuuu是如何在语言中实现的?

python的float.\uuuueq\uuuuuuuuuuuuuuuuuuuuuuuuu是如何在语言中实现的?,python,math,floating-point,Python,Math,Floating Point,我知道比较两个浮点数是否相等的最好方法通常是使用math.isclosefloat_a,float_b。但我很想知道,如果只做float_a==float_b,python是如何做到的 我想它是用C实现的,但是它背后的逻辑是什么呢 基本上。它看起来非常复杂,但这种复杂性主要体现在处理浮点数与整数比较的情况。在Python中,整数对象的大小是任意的,而不是C-int封装在Python对象中 但对于浮点数和浮点数的简单情况: 因此,它只是从float对象创建两个C double,然后跳过所有int处

我知道比较两个浮点数是否相等的最好方法通常是使用math.isclosefloat_a,float_b。但我很想知道,如果只做float_a==float_b,python是如何做到的

我想它是用C实现的,但是它背后的逻辑是什么呢

基本上。它看起来非常复杂,但这种复杂性主要体现在处理浮点数与整数比较的情况。在Python中,整数对象的大小是任意的,而不是C-int封装在Python对象中

但对于浮点数和浮点数的简单情况:

因此,它只是从float对象创建两个C double,然后跳过所有int处理内容:

 Compare:
    switch (op) {
    case Py_EQ:
        r = i == j;
        break;
    case Py_NE:
        r = i != j;
        break;
    case Py_LE:
        r = i <= j;
        break;
    case Py_GE:
        r = i >= j;
        break;
    case Py_LT:
        r = i < j;
        break;
    case Py_GT:
        r = i > j;
        break;
    }
    return PyBool_FromLong(r);
它最终只是做了一个C-level==比较。所以它不做数学运算。在引擎盖下面。

这是

基本上。它看起来非常复杂,但这种复杂性主要体现在处理浮点数与整数比较的情况。在Python中,整数对象的大小是任意的,而不是C-int封装在Python对象中

但对于浮点数和浮点数的简单情况:

因此,它只是从float对象创建两个C double,然后跳过所有int处理内容:

 Compare:
    switch (op) {
    case Py_EQ:
        r = i == j;
        break;
    case Py_NE:
        r = i != j;
        break;
    case Py_LE:
        r = i <= j;
        break;
    case Py_GE:
        r = i >= j;
        break;
    case Py_LT:
        r = i < j;
        break;
    case Py_GT:
        r = i > j;
        break;
    }
    return PyBool_FromLong(r);

它最终只是做了一个C-level==比较。所以它不做数学运算。在引擎盖下面。

math.isclosefloat\u a,float\u b不是比较两个浮点数是否相等的最佳方法。这是一种比较两个浮点数是否相等的方法,有时可能但并不总是一种合适的操作。您是否真的想知道Python如何实现比较,即了解代码、算法或使用,或者想知道比较执行的函数,即,结果的说明。关于后者,我记得==测试相等性:当且仅当左操作数与右操作数的数字相同时,且不允许舍入错误,它才返回true。math.isclosefloat_a,float_b不是比较两个浮点数相等性的最佳方法。这是一种比较两个浮点数是否相等的方法,有时可能但并不总是一种合适的操作。您是否真的想知道Python如何实现比较,即了解代码、算法或使用,或者想知道比较执行的函数,即,结果的说明。关于后者,我记得==测试相等性:当且仅当左操作数与右操作数的数字相同时,且不允许舍入错误,它才返回true。