double真的可以存这么大?求原理,玄关
  • 板块灌水区
  • 楼主xiaozhao_
  • 当前回复7
  • 已保存回复8
  • 发布时间2024/7/24 10:56
  • 上次更新2024/7/24 11:49:51
查看原帖
double真的可以存这么大?求原理,玄关
591952
xiaozhao_楼主2024/7/24 10:56

之前看到一个帖子说doubel可以存储 21024−12^{1024}-1 ,刚看的时候以为楼主说的是错的,今天想起来试试真的可以(不考虑精度问题)

这是double的:

#include<bits/stdc++.h>
using namespace std;
double a=1;
int main(){
	freopen("awa.txt","w",stdout);
	for(int i=1;i<=1023;i++){
		a*=2;
	}
	printf("%lf",a);
	return 0;
}

这是高精度的:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int main(){
	freopen("awa1.txt","w",stdout); 
	int c[N]={1,0},n,lenc=1;
	n=1022;
	for(int i=1;i<=n;i++){
		int x=0;
		for(int j=1;j<=lenc;j++){
			c[j-1]=c[j-1]*2+x;
			x=c[j-1]/10;
			c[j-1]%=10;
		}
		c[i+lenc]=x;
		lenc++;
	}
	while(c[lenc]==0&&lenc>0) lenc--;
	for(int i=0;i<=lenc;i++) cout<<c[lenc-i];	
	return 0;
}

不知道由于什么原因,printf输入 21024−12^{1024}-1 时会输出 infinf ,所以只测了 210232^{1023} 。这两代码输出的答案是一致的,我很好奇double是怎么用 88 字节的空间存储 210232^{1023} ,或者说它不止是用了这 88 字节。

另一个问题是对已经存储了 210232^{1023} 的double进行加减运算无效,这是精度的问题吗?是什么让加减运算无效了?

求dalao回答,玄关~

2024/7/24 10:56
加载中...