将 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 (将#修改为@)