相关疑难解决方法(0)

在Python中比较浮点数几乎相等的最佳方法是什么?

众所周知,由于舍入和精度问题,比较浮点数是否相等.

例如:https: //randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

在Python中处理这个问题的推荐方法是什么?

当然,这个地方有一个标准的库函数吗?

python floating-point

291
推荐指数
10
解决办法
19万
查看次数

相同的C++'if'语句,在Linux/Windows上有不同的结果

我发现了一个有趣的案例,相同的C++代码在不同的系统上产生不同的结果.

#include <cstdio>
int main()
{
    int a=20, b=14;
    if(a*1.0/b*(a+1)/(b+1)==2) printf("YES!");
    else printf("NO!");
}
Run Code Online (Sandbox Code Playgroud)

使用GCC 4.6.3在Ubuntu Linux 12.04上编译,输出YES!

使用GCC 4.6.2在Windows 7上编译,输出NO!

但是,使用:

double  c = a*1.0/b*(a+1)/(b+1);
if (c==2) printf("YES!");
...
Run Code Online (Sandbox Code Playgroud)

将返回YES!在两台机器上.

有什么想法出现这种差异?这是由编译器版本不匹配引起的(路径级版本号应该不重要)?为什么它实际输出NO!在Windows机器上,这种情况显然是真的吗?

c++ gcc mingw multiplatform

3
推荐指数
2
解决办法
784
查看次数

为什么这些浮标被评估为平等?

在下面的代码中,如果x0 == x1和y0 == y1,那么它应该告诉我.在我正在使用的例子中,它们是.但是,Python只是说x值相等,而不是y.

这是代码:

print "arc2x0 = ", arc2x0, ", arc2x1 = ", arc2x1
print "arc2y0 = ", arc2y0, ", arc2y1 = ", arc2y1

if arc2x0 == arc2x1:
    print "x0 == x1"
else:
    print "x0 != x1"

if arc2y0 == arc2y1:
    print "y0 == y1"
else:
    print "y0 != y1"
Run Code Online (Sandbox Code Playgroud)

这是输出:

arc2x0 =  5 , arc2x1 =  5.0
arc2y0 =  -4.16026900507 , arc2y1 =  -4.16026900507
x0 == x1
y0 != y1
Run Code Online (Sandbox Code Playgroud)

知道为什么y值测试相同吗?这些值以相同的方式计算.也许除了我所看到的不平等之外还有更多的精确度?有关如何调试此精度或任何其他想法的任何方法?

python printing equivalent

1
推荐指数
1
解决办法
392
查看次数

标签 统计

python ×2

c++ ×1

equivalent ×1

floating-point ×1

gcc ×1

mingw ×1

multiplatform ×1

printing ×1