当取为double时,实际值不存储在变量中

时间:2016-01-14 20:22:09

标签: c++ double cin

当我输入l = 1 r = 999999999999999999 k = 1000000000时,r的值变为 1.0e + 18.我如何获取实际变量输入? 这是我的代码:

#include<stdio.h>
#include<iostream>
#include<iomanip>
using namespace std;
#define ll long long
int main() {
    double l, r,k;
    cin >> l >> r >> k;
    double i = 1,c=0;
    while (i<=r)
    {
        if (i >= l) {
            cout <<fixed<<setprecision(0)<< i << " ";c++;
        }
        i *= k;
    }
    if (c == 0)cout << -1;
    cout << endl;
}

2 个答案:

答案 0 :(得分:6)

您为Schema::table('users', function ($table) { $table->renameColumn('from', 'to'); }); 输入的值999999999999999999具有18位精度。但是,r变量可以表示少于16位;因此,你的价值被四舍五入到1.0e + 18。只是为了好玩,尝试在您的值中加1,并将其与原始值进行比较 - 您会发现它们是相同的。不只是'亲密' - 相等。那是对的 - double

关于某些浮点数错综复杂的教程,我建议你take a look at this tutorial

祝你好运。

答案 1 :(得分:0)

要回答第二个问题,您可以将999999999999999999存储为long long,因为它具有更多的精度。 (它只支持整数,因此它不需要指数位。)