gpt4 book ai didi

c++ - C++ 上限函数的奇怪结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:53 26 4
gpt4 key购买 nike

我一直在尝试 ceiling 函数并且得到了一些奇怪的结果。如果我对一个十进制数乘以一百执行 ceil 运算,我会得到一个特定的结果。但是,如果我直接对该乘法的结果执行 ceil,我会得到完全不同的输出。另一个转折是这些不同的结果只出现在某些数字上。任何帮助将不胜感激。

#include <stdio.h>
#include <cmath>

int main ()
{
cout << "The ceiling of " << 411 << " is " << ceil(411) << endl;
cout << "The ceiling of 4.11*100 is " << ceil(4.11*100) << endl;

cout << "The ceiling of " << 121 << " is " << ceil(121) << endl;
cout << "The ceiling of 1.21*100 is " << ceil(1.21*100) << endl;;
}


OUTPUT:

The ceiling of 411 is 411
The ceiling of 4.11*100 is 412
The ceiling of 121 is 121
The ceiling of 1.21*100 is 121

最佳答案

这里的问题是计算机无法可靠地表示 float 。这意味着,4.11 不是表示为 4.11,而是非常接近它的东西。当这个“非常接近 4.11” 的数字乘以 100 时,乘积的 ceil 结果是 412,让你大吃一惊!但是一旦您了解了 float 的存储和检索方式,就一点也不奇怪了。


看看这个有趣的演示:

float a = 3.2; //3.2 is double!
if ( a == 3.2 )
cout << "a is equal to 3.2"<<endl;
else
cout << "a is not equal to 3.2"<<endl;

float b = 3.2f; //3.2f is a float. Note: f is appended to make it float!
if ( b == 3.2f )
cout << "b is equal to 3.2f"<<endl;
else
cout << "b is not equal to 3.2f"<<endl;

输出:

a is not equal to 3.2
b is equal to 3.2f

在ideone做实验:http://www.ideone.com/pAGzM

尝试将变量 a 的类型从 float 更改为 double,参见 the result again .

关于c++ - C++ 上限函数的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5562492/

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