最近,我正在研究高精度计算。这几天,我先后用本算法 AC 了 P1601 A+B Problem(高精) 和 P1303 A*B Problem。
不过,我并没有善罢甘休。昨天,我无意识地翻了翻 C++ 书,竟惊喜地发现,长双精度实型 long double 可以表示绝对值范围在约 0 ~ 1.1×104932 的一切实数!“不是结果最多才 104000 吗,我何不用 long double 来解决上述两个问题呢?”我想。
说干就干,我为 P1601 写了如下代码:
#include<bits/stdc++.h>
using namespace std;
long double a,b;
int main(){
scanf("%Lf%Lf",&a,&b);
printf("%.Lf",a+b);
}
我信心满满地提交了代码,却只得了 40 分!
是这样吗?我不信!我随及为 P1303 写了如下代码:
#include<bits/stdc++.h>
using namespace std;
long double a,b;
int main(){
scanf("%Lf%Lf",&a,&b);
printf("%.Lf",a*b);
}
可是,我再次只得了 40 分!
我查阅了网上,没有发现 long double 的问题;又看了看评测记录,发现都是错在从左往右第 20 位数左右,如悬浮在 WA 上看到的如下内容(从 column 20 即可看出是 20 位):
Wrong Answer.wrong answer On line 1 column 20, read 8, expected 5.
难道投机取巧真会遭致这么严重的后果吗?long double 的第 20 位到底为什么错了?