高精度計算
編輯在計算機科學中,任意精度算術(也稱為 bignum 算術、多精度算術或有時是無限精度算術)表示計算是在其精度位數僅受主機系統可用內存限制的數字上執行的。 這與大多數算術邏輯單元 (ALU) 硬件中更快的固定精度算術形成對比,后者通常提供 8 到 64 位精度。
一些現代編程語言內置了對 bignums 的支持,而其他語言則擁有可用于任意精度整數和浮點數學的庫。 這些實現通常使用可變長度的數字數組,而不是將值存儲為與處理器寄存器大小相關的固定位數。
任意精度用于算術速度不是限制因素的應用程序,或者需要非常大的精確結果的應用程序。 它不應與許多計算機代數系統提供的符號計算相混淆,后者用 π·sin(2) 等表達式表示數字,因此可以無限精確地表示任何可計算的數字。
應用
編輯一個常見的應用是公鑰密碼學,其算法通常采用具有數百位整數的算術運算。 另一種情況是在人為限制和溢出不合適的情況下。 它還可用于檢查固定精度計算的結果,以及確定公式中所需系數的最佳或接近最佳值,例如 1 3 {\textstyle {\sqrt {\frac {1}{ 3}}}}出現在高斯積分中。
任意精度算術還用于計算基本數學常數,如 π 到數百萬或更多數字,并分析數字串的屬性,或更一般地研究某些問題難以解決的函數(如黎曼 zeta 函數)的精確行為 通過分析方法探索。 另一個例子是渲染具有極高放大率的分形圖像,例如在 Mandelbrot 集中發現的那些。
高精度計算也可用于避免溢出,這是固定精度算法的固有限制。 類似于從 99999 變為 00000 的 5 位里程表的顯示,如果數字變得太大而無法在固定精度級別表示,則固定精度整數可能會顯示環繞。 一些處理器可以通過飽和來處理溢出,這意味著如果結果無法表示,則將其替換為最接近的可表示值。 (對于 16 位無符號飽和,將任何正數加到 65535 將產生 65535。)如果算術結果超過可用精度,某些處理器會生成異常。 必要時,可以捕獲異常并從中恢復——例如,可以使用任意精度算法在軟件中重新啟動操作。
在許多情況下,任務或程序員可以保證特定應用程序中的整數值不會增長到足以導致溢出的程度。 這種保證可能基于實用限制:學校出勤計劃可能有 4,000 名學生的任務限制。 程序員可以設計計算,使中間結果保持在指定的精度范圍內。
某些編程語言(例如 Lisp、Python、Perl、Haskell、Ruby 和 Raku)使用或可以選擇使用任意精度數字來進行所有整數運算。 雖然這會降低性能,但它消除了由于簡單溢出而導致不正確結果(或異常)的可能性。 它還可以保證所有機器上的算術結果都相同,而不管任何特定機器的字長。 在編程語言中專門使用任意精度數字也簡化了語言,因為數字就是數字,不需要多種類型來表示不同的精度級別。
實施問題
編輯高度計算比使用完全適合處理器寄存器的數字的算術要慢得多,因為后者通常在硬件算術中實現,而前者必須在軟件中實現。
即使計算機缺少用于某些運算(例如整數除法或所有浮點運算)的硬件,而是提供了軟件,它也會使用與可用硬件寄存器密切相關的數字大小:只有一個或兩個字,xxx不是 N 字。 也有例外,因為 1950 年代和 1960 年代的某些可變字長機器,特別是 IBM 1620、IBM 1401 和 Honeywell Liberator 系列,可以操縱僅受可用存儲空間限制的數字,并用一個額外的位來分隔值。
數字可以以定點格式存儲,也可以以浮點格式存儲為有效數乘以任意指數。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195887/