如何解决将 double 更改为 float 给出相同的答案,但比较后出现意外的输出
所以我尝试了 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 举报,一经查实,本站将立刻删除。