#include <iostream>
using namespace std;
int main() {
int steps=1000000000;
float s = 0;
for (int i=1;i<(steps+1);i++){
s += (i/2.0) ;
}
cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)
声明s为float:9.0072e + 15
声明s为double:2.5e + 17(与Julia中实现的结果相同)
据我所知,它double具有双精度float,但float仍应处理高达10 ^ 38的数字.
我确实读过类似的主题,其结果不尽相同,但在那种情况下,差异非常小,这里差异是25倍.
我还补充说,使用long double而不是给我相同的结果double.如果事情是精确的,我会期望有一些不同的东西.
问题是缺乏精确性:https://en.wikipedia.org/wiki/Floating_point
在1亿个数字后,您将1e8添加到1e16(或至少是该数量的数字),但单精度数字仅精确到7位数 - 因此它与添加0到1e16相同; 这就是为什么你的结果浮动相当低的原因.
在大多数情况下,首选双重浮动.
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |