高精度计算
编辑在计算机科学中,任意精度算术表示计算是在其精度位数仅受主机系统可用内存限制的数字上执行的。 这与大多数算术逻辑单元 (ALU) 硬件中更快的固定精度算术形成对比,后者通常提供 8 到 64 位精度。
一些现代编程语言内置了对 bignums 的支持,而其他语言则拥有可用于任意精度整数和浮点数学的库。 这些实现通常使用可变长度的数字数组,而不是将值存储为与处理器寄存器大小相关的固定位数。
任意精度用于算术速度不是限制因素的应用程序,或者需要非常大的精确结果的应用程序。 它不应与许多计算机代数系统提供的符号计算相混淆,后者用 π·sin(2) 等表达式表示数字,因此可以无限精确地表示任何可计算的数字。
应用
编辑一个常见的应用是公钥密码学,其算法通常采用具有数百位整数的算术运算。 另一种情况是在人为限制和溢出不合适的情况下。 它还可用于检查固定精度计算的结果,以及确定公式中所需系数的最佳或接近最佳值,例如 1 3出现在高斯积分中。
任意精度算术还用于计算基本数学常数,如 π 到数百万或更多数字,并分析数字串的属性,或更一般地研究某些问题难以解决的函数(如黎曼 zeta 函数)的精确行为 通过分析方法探索。 另一个例子是渲染具有极高放大率的分形图像,例如在 Mandelbrot 集中发现的那些。
高精度计算也可用于避免溢出,这是固定精度算法的固有限制。 类似于从 99999 变为 00000 的 5 位里程表的显示,如果数字变得太大而无法在固定精度级别表示,则固定精度整数可能会显示环绕。 一些处理器可以通过饱和来处理溢出,这意味着如果结果无法表示,则将其替换为最接近的可表示值。 (对于 16 位无符号饱和,将任何正数加到 65535 将产生 65535。)如果算术结果超过可用精度,某些处理器会生成异常。 必要时,可以捕获异常并从中恢复——例如,可以使用任意精度算法在软件中重新启动操作。
在许多情况下,任务或程序员可以保证特定应用程序中的整数值不会增长到足以导致溢出的程度。 这种保证可能基于实用限制:学校出勤计划可能有 4,000 名学生的任务限制。 程序员可以设计计算,使中间结果保持在指定的精度范围内。
某些编程语言使用或可以选择使用任意精度数字来进行所有整数运算。 虽然这会降低性能,但它消除了由于简单溢出而导致不正确结果(或异常)的可能性。 它还可以保证所有机器上的算术结果都相同,而不管任何特定机器的字长。 在编程语言中专门使用任意精度数字也简化了语言,因为数字就是数字,不需要多种类型来表示不同的精度级别。
实施问题
编辑高度计算比使用完全适合处理器寄存器的数字的算术要慢得多,因为后者通常在硬件算术中实现,而前者必须在软件中实现。
即使计算机缺少用于某些运算(例如整数除法或所有浮点运算)的硬件,而是提供了软件,它也会使用与可用硬件寄存器密切相关的数字大小:只有一个或两个字,xxx不是 N 字。 也有例外,因为 1950 年代和 1960 年代的某些可变字长机器,特别是 IBM 1620、IBM 1401 和 Honeywell Liberator 系列,可以操纵仅受可用存储空间限制的数字,并用一个额外的位来分隔值。
数字可以以定点格式存储,也可以以浮点格式存储为有效数乘以任意指数。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/195887/