gpt4 book ai didi

c++ - 我们可以假设以下任何一对浮点算术语句总是产生相同的结果吗?

转载 作者:太空狗 更新时间:2023-10-29 20:59:21 24 4
gpt4 key购买 nike

给定以下具有任意值的浮点变量,在 c/c++ 中。

float a, b, c, d;

在下面的语句中,我们可以假设它们中的任何一对总是产生相同的结果吗?

float result_1 = a + b + c + d - c;
float result_2= a + b + c + (d - c);
float result_3 = a + b + d;

此外,是否对以下谓词有任何保证:

a + b - b == a

最佳答案

不,你不能假设这个。我打破了你所有的三个例子:(Live)

#include <iostream>

int main()
{
double a = 1, b = 1e100, c= 1e100, d= 1, c2 = .1, d2 = -.1, b2 = 1;

std::cout << ( a + b2 + c2 + d2 - c2 == a + b2 + c2 + (d2 - c2)) << "\n"
<< ( a + b2 + c + d - c == a + b2 + d) << "\n"
<< ( a == a + b -b);
}

输出:

0 0 0

==!= 在浮点类型上总是不安全的,因为它们有舍入错误。

关于c++ - 我们可以假设以下任何一对浮点算术语句总是产生相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com