关于float和double

P1035 [NOIP2002 普及组] 级数求和

Magiczzz @ 2023-03-08 22:01:45

开始我用的float有两个测试没过(应该是精度不够高,导致算不到后面的数),但是在devc++上面输出了结果(当然是错误结果),但是精度不够高,就跳不出循环啊,怎么还有了错误输出呢?是我在哪里理解错了吗?

后来把float改为double测试数据就都通过了

下面是错误代码


#include<iostream>

using namespace std;

int main()

{

    int n;
    cin>>n;
    float sum=0;
    int i=1;
    for(i=1;sum<=n;i++)
    {
        sum+=(1.0/i);   
    }
    cout<<i-1<<endl;
    return 0;
}

by mashduihca @ 2023-03-08 22:05:19

1+2,=2叫精度不高,等于4也叫精度不高。


by MatrixGroup @ 2023-03-08 22:14:08

@Magiczzz mashduihca 正解。


by MatrixGroup @ 2023-03-08 22:16:53

假如精度是 0.1

\begin{array}{c} 1+0.5+0.4+0.3>1\\ 1+0.5+0.3+0.2=1 \end{array}

by Magiczzz @ 2023-03-09 22:16:36

@Breakingtdasc 请问为什么第二个式子算出来等于一呀


by Magiczzz @ 2023-03-09 22:18:15

@mashduihca 为什么结果会出现比实际值还大的情况呢


by mashduihca @ 2023-03-09 22:43:20

@Magiczzz IEEE754的分数部分是0舍1入。


by MatrixGroup @ 2023-03-09 22:48:16

@Magiczzz 额,2


by MatrixGroup @ 2023-03-09 22:49:00

@Magiczzz

为什么结果会出现比实际值还大的情况呢

  1. 四舍五入
  2. 你在正确的时候还小,之后还是会变大的。

by Magiczzz @ 2023-03-10 11:42:59

@Breakingtdasc 谢谢!


by Magiczzz @ 2023-03-10 11:43:18

@mashduihca 谢谢!


|