类型转换问题

我有一个关于在解决问题时遇到的类型转换错误的问题(底部的链接)。我的AC提交和WA提交之间的唯一区别是,在第一个提交中,我将类型转换为双精度而非浮点型。我非常感谢您澄清为什么float会产生错误。谢谢。

WA提交:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long long int a,b,c,d;
        cin>>a>>b>>c>>d;
        if(a<=b)
            cout<<b<<endl;
        else
        {
            if(d>=c)
                cout<<-1<<endl;
            else
            {
                long long int val = c - d;
                long long int f = ceil((a-b)/((float)val));
                cout<<(b + (c * f))<<endl;
            }
        }


    }
    return 0;
}

AC提交

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long long int a,b,c,d;
        cin>>a>>b>>c>>d;
        if(a<=b)
            cout<<b<<endl;
        else
        {
            if(d>=c)
                cout<<-1<<endl;
            else
            {
                long long int val = c - d;
                long long int f = ceil((a-b)/((double)val));
                cout<<(b + (c * f))<<endl;
            }
        }


    }
    return 0;
}

Question

评论