当我输入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;
}
答案 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
,因为它具有更多的精度。 (它只支持整数,因此它不需要指数位。)