使用long double来做高精度计算,结果只能得40%的分,这是怎么回事?
  • 板块学术版
  • 楼主Herman526
  • 当前回复28
  • 已保存回复28
  • 发布时间2022/12/23 09:25
  • 上次更新2023/10/24 06:54:02
查看原帖
使用long double来做高精度计算,结果只能得40%的分,这是怎么回事?
786834
Herman526楼主2022/12/23 09:25

最近,我正在研究高精度计算。这几天,我先后用本算法 AC 了 P1601 A+B Problem(高精)P1303 A*B Problem

不过,我并没有善罢甘休。昨天,我无意识地翻了翻 C++ 书,竟惊喜地发现,长双精度实型 long double 可以表示绝对值范围在约 00 ~ 1.1×1049321.1\times10^{4932} 的一切实数!“不是结果最多才 10400010^{4000} 吗,我何不用 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);//即%.0Lf
}

我信心满满地提交了代码,却只得了 4040 分!

是这样吗?我不信!我随及为 P1303 写了如下代码:

#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 位):

Wrong Answer.wrong answer On line 1 column 20, read 8, expected 5.

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

2022/12/23 09:25
加载中...