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

-1 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;
}
Run Code Online (Sandbox Code Playgroud)

Bob*_*ica 6

您输入的值r999999999999999999具有18位精度.甲double可变,但是,可以表示比特小于16个位数; 因此,你的价值被四舍五入到1.0e + 18.只是为了好玩,尝试在您的值中加1,并将其与原始值进行比较 - 您会发现它们是相同的.不只是'亲密' - 相等.那是对的 - r == r + 1.

有关浮点数的一些复杂性的教程,我建议你看一下本教程.

祝你好运.