问题描述
所以我尝试了 codechef 竞赛中的一个问题,这个问题非常简单。这个问题对于我的疑问没有必要,实际上疑问是,当我将变量“值”的数据类型从 float 更改为 double 时,答案保持不变,但比较运算符的工作方式不同
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
float k1,k2,k3,v;
float value; // <= This line
cin >> k1 >> k2 >> k3 >> v;
//Task
float final = 100.0 / (k1 * k2 * k3 * v);
//Round off to two decimal places
value = (int)(final * 100 + .5);
value = (float)value / 100;
//Check value
cout << value << endl;
//Further task
if (value == 9.58)
{
cout << "yes" << endl;
}
else
{
cout << "no" << endl;
}
}
return 0;
}
现在是测试用例的答案
1
1.0 1.0 1.0 10.44
出来了
9.58
no
现在,如果我将 value 的数据类型从 float 更改为 double
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
float k1,v;
double value; // <= This line
cin >> k1 >> k2 >> k3 >> v;
//Task
float final = 100.0 / (k1 * k2 * k3 * v);
//Round off to two decimal places
value = (int)(final * 100 + .5);
value = (float)value / 100;
//Check value
cout << value << endl;
//Further task
if (value == 9.58)
{
cout << "yes" << endl;
}
else
{
cout << "no" << endl;
}
}
return 0;
}
输出是
9.58
yes
对于相同的测试用例。
那么,为什么会这样,为什么即使使用 float 和 double 的相同值,比较运算符的工作方式也会不同。和小数点后两位的四舍五入有关系吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)