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