微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 double 更改为 float 给出相同的答案,但比较后出现意外的输出

如何解决将 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 举报,一经查实,本站将立刻删除。