在python和c中浮点数的减法是不一样的,当我尝试“0.3 - 0.1”时,c告诉我0.2,python告诉我0.199999...98。
我写了下面的c代码:
// a.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
double a, b;
a = strtod(argv[1], NULL);
b = strtod(argv[2], NULL);
printf("%lf, %lf, %lf\n", a, b, a - b);
return 0;
}
我计算出0.3 - 0.1
> gcc a.c -O3
> ./a.out 0.3 0.1
0.300000 0.100000 0.200000
目前看来还不错。
但是当我在python中计算时:
# idle
>>> 0.3 - 0.1
0.19999999999999998
为什么?为什么两者的行为不同?有什么方法可以改进Python吗?或者Python的作者已经尽了最大的努力?
2条答案
按热度按时间zdwk9cvp1#
为什么?为什么两者的行为不同
因为在C语言中使用
printf
和%lf
说明符打印浮点数时,会打印小数点后6位数的精度,而在Python中,打印数字时使用的是“表示实际值所需的高精度”,请参阅https://docs.python.org/3.7/library/string.html#formatspec和https://en.cppreference.com/w/cpp/io/c/fprintf和Printf width specifier to maintain precision of floating-point value。有什么方法可以改进Python吗?
如果“改进”这个词是指从python中获得与C代码相同的输出,那么您应该正确地格式化它。要获得与C代码 * 应该 * 输出的相同的输出,您可以:
Python的作者们已经尽力了吗
我强烈认为他们做到了。他们正在免费提供一个惊人的项目,这太惊人了。考虑支持他们,见https://www.python.org/about/help/。
3vpjnl9f2#
没有区别,在C中打印更多的数字,你会看到
printf
只是对值进行了四舍五入。https://godbolt.org/z/Mf5cr96d4