社区讨论

使用long double来做高精度计算,结果只能得40%的分,这是怎么回事?

学术版参与者 8已保存回复 28

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
28 条
当前快照
1 份
快照标识符
@lo3hvh20
此快照首次捕获于
2023/10/24 06:54
2 年前
此快照最后确认于
2023/10/24 06:54
2 年前
查看原帖
最近,我正在研究高精度计算。这几天,我先后用本算法 AC 了 P1601 A+B Problem(高精)P1303 A*B Problem
不过,我并没有善罢甘休。昨天,我无意识地翻了翻 C++ 书,竟惊喜地发现,长双精度实型 long double 可以表示绝对值范围在约 00 ~ 1.1×1049321.1\times10^{4932} 的一切实数!“不是结果最多才 10400010^{4000} 吗,我何不用 long double 来解决上述两个问题呢?”我想。
说干就干,我为 P1601 写了如下代码:
CPP
#include<bits/stdc++.h>
using namespace std;
long double a,b;
int main(){
	scanf("%Lf%Lf",&a,&b);
	printf("%.Lf",a+b);//即%.0Lf
}
我信心满满地提交了代码,却只得了 4040 分!
是这样吗?我不信!我随及为 P1303 写了如下代码:
CPP
#include<bits/stdc++.h>
using namespace std;
long double a,b;
int main(){
	scanf("%Lf%Lf",&a,&b);
	printf("%.Lf",a*b);//仅仅改动了此处
}
可是,我再次只得了 4040 分!
我查阅了网上,没有发现 long double 的问题;又看了看评测记录,发现都是错在从左往右第 2020 位数左右,如悬浮在 WA 上看到的如下内容(从 column 20 即可看出是 2020 位):
CPP
Wrong Answer.wrong answer On line 1 column 20, read 8, expected 5.

难道投机取巧真会遭致这么严重的后果吗?long double 的第 2020 位到底为什么错了?

回复

28 条回复,欢迎继续交流。

正在加载回复...