大型双打/浮动/数字
Large doubles/float/numbers
假设我有一个很大的浮点数,比如小数点后1万亿位。很明显长双精度不能承受这个。让我们假设我有一台电脑有足够的内存来容纳它。你是怎么做到这种事的?
你需要任意精度的算术
任意精度数学
说"任意精度算术"(或类似的东西)很容易,但我认为值得补充的是,很难想象如何将接近这个大小的数字使用。
举个例子:目前对宇宙大小的估计在1500 - 2000亿光年附近。在光谱的另一端,估计单个电子的直径略小于1大气压计。1光年大约是9.46 × 1015米(为简单起见,我们将其视为1016米)。
那么,让我们以1个大气表为单位,计算出这个单位中宇宙直径的数字的大小。1018单位/米* 1016米/光年* 1011光年/宇宙直径=约45位数字,以电子直径的单位表示宇宙的直径。
即使我们继续下一步,用超弦的理论大小来表示它,并添加一些额外的数字,以防目前的估计偏离几个数量级,我们最终仍然会得到一个大约65位的数字。
这意味着,例如,如果我们知道宇宙的直径和一条超弦的大小,并且我们想用超弦的直径来计算宇宙的体积,我们最大的中间结果将是600-700位左右的数字。
考虑另一个突出的点:如果你要编程一台运行在10ghz频率上的64位计算机,除了计数什么都不做——每个时钟周期增加一次寄存器——它将花费大约1400年的时间来循环64位数字,所以它再次缠绕到0。
最重要的是,很难找到借口(更不用说真正的理由)来执行接近数百万、数十亿/百万或数万亿/数十亿的数字的计算。宇宙没有那么大,没有那么多原子,等等。
听起来像是发明对数的目的。
如果你不知道你打算怎么处理这个数字,就不可能准确地说出如何表示它。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 将浮动的heightmap数组导出为16位原始值
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 如何将双重或浮动(所有数字)转换为int
- 浮动显示0数字后1.5
- 大型双打/浮动/数字