四捨五入
舍入意味著替換一個數字,其近似值具有更短,更簡單或更明確的表示形式。例如,用$ 23.45替換$ 23.4476,以1/3的價格替換$ 23.45,或以1.414的價格代替$ 312/937或表達式√2 。
通常要進行四捨五入,以獲得比原始的值更易於報告和通信的值。舍入也可能很重要,以避免對計算數量,測量或估計的誤導性的精確報告;例如,計算為123,456但已知僅在幾百個單位內的數量,通常更好地說為“約123,500”。
另一方面,確切數字的捨入將在報告的結果中引入一些圓形錯誤。在報告許多計算時,幾乎不可避免地會舍入 - 尤其是在整數或固定點算術中分配兩個數字時;計算數學函數(例如方形,對數和罪惡)時;或使用帶有固定數量的重要數字的浮點表示時。通過一系列計算,這些舍入錯誤通常會累積,在某些條件不良的情況下,它們可能會使結果毫無意義。
精確的先驗數學函數的準確舍入非常困難,因為需要計算出需要計算的額外數字數量,以解決是否圍繞或向下匯總。這個問題被稱為“餐桌製造者的困境”。
舍入與必須按數字或數字信號編碼物理數量時發生的量化相似之處。
波浪形等於符號( ≈ ,大約等於)有時用於指示精確數字的捨入,例如9.98≈10。Alfred George George Greenhill在1892年引入了此標誌。
四捨五入方法的理想特徵包括:
- 舍入應通過功能進行。這樣,當在不同情況下將相同的輸入四捨五入時,輸出將不變。
- 通過舍入進行的計算應接近完成的情況,而無需舍入。
- 由於(1)和(2)的結果,舍入的輸出應接近其輸入,通常是某些度量標準盡可能接近。
- 要考慮到舍入,範圍將是域的一個子集,總的來說。古典範圍是整數, z 。
- 舍入應保留域和範圍之間已經存在的對稱性。使用有限的精度(或離散域),這轉化為消除偏見。
- 一種圓形方法應具有使用有限精度的計算機科學或人類算術的實用性,而速度是一個考慮因素。
由於通常不可能滿足所有理想特徵的方法,因此存在許多不同的捨入方法。
一般而言,舍入是無能為力的;即,一旦一個數字被四捨五入,再次將其舍入將不會改變其價值。四捨五入的功能也是單調的。即, 與較小的數字相比,舍入數字更大或相等的結果。在離散範圍的一般情況下,它們是分段常數函數。
舍入的類型
典型的圓形問題包括:
四捨五入問題 | 示例輸入 | 結果 | 圓形標準 |
---|---|---|---|
分數近似非理性數字 | π | 22 / 7 | 一位數派派員 |
用較小的分子和分母近距離近似一個理性的數字 | 399 / 941 | 3 / 7 | 一位數派派員 |
通過小數數近似分數 | 5 / 3 | 1.6667 | 4個小數位 |
數字較少的數字近似小數號 | 2.1784 | 2.18 | 2個小數位 |
通過更尾隨的整數近似小數整數 | 23,217 | 23,200 | 3個重要數字 |
使用科學符號近似大十進制整數 | 300,999,999 | 3.01 × 108 | 3個重要數字 |
近似一個指定金額的倍數 | 48.2 | 45 | 15的倍數 |
通過整數(有時是第二名的整數)近似一組有限的實數(主要是分數),以便圓形數字的總和等於數字的圓形總和(例如,如[1]的分配座位是由最大的方法實施的,請參見分配數學,[2]以將發票的總增值稅分配給其項目) | {3/12, 4/12, 5/12} | {0, 0, 1} | 圓形元素的總和等於圓形元素總和 |
圓形到整數
舍入的最基本形式是用整數替換任意數字。以下所有捨入模式都是抽象單題“ round()”過程的具體實現。這些是真實的功能(除了使用隨機性的功能)。
指向整數的捨入
這四種方法稱為圓形舍入整數,因為從原始數字x到圓形值y的位移都朝向或遠離相同的限制值(0, +∞或-d -∞)。定向舍入用於間隔算術,通常在財務計算中需要。
如果x是正的,則圓向下與圓形零零相同,並且圓形與從零零的圓形相同。如果x為負,則圓向下與從零開始的圓形圓形相同,並且圓形與圓形零件零相同。無論如何,如果x是整數,則y只是x 。
如果按順序進行許多計算,則選擇舍入方法可能會對結果產生非常重要的影響。一個著名的實例涉及1982年溫哥華證券交易所建立的新指數。最初設定為1000.000(三個小數點準確地點),22個月後跌至520個大約520左右 - 而股票價格通常在此期間上漲。 。問題是由於指數每天被重新計算了數千次,並始終以3個小數點舍入到3個小數位置,以至於舍入的錯誤累積了。在同一時期結束時,用更好的圓形重新計算的指數值為1098.892。
對於下面的示例, SGN( x )指的是應用於原始數字x的符號函數。
舍入
一個人可能會向下(或沿地板或朝負無窮大): y是不超過x的最大整數。
例如,23.7被舍入到23,-23.2被舍入到-24。
圍捕
也可能會圍起來(或將天花板朝上,或朝著正無窮大): y是最小的整數,不少於x 。
例如,23.2被四捨五入為24,-23.7被四捨五入為-23。
朝零舍入
一個人也可以朝零(或截斷,或遠離Infinity )旋轉: y是最接近x的整數,使其在0和x之間(包括);即y是X的整數部分,沒有其分數數字。
例如,23.7被四捨五入到23,-23.7被舍入到-23。
遠離零
一個人也可能會遠離零(或圓形朝無窮大)圍繞: y是最接近0(或等效地, x )的整數,因此x在0和y之間(包括)。
例如,23.2被四捨五入為24,-23.2被四捨五入為-24。
舍入到最近的整數
這六種方法被稱為舍入到最近的整數。將一個數字x舍入到最近的整數中,對於兩個整數之間的x完全半路的情況,即當x的分數正好為0.5時,就需要一些七問題規則。
如果不適合0.5個零件,則圓形到最近的方法引入的圓形錯誤將是對稱的:對於舍入的每一部分(例如0.268),都有一個互補的分數(即0.732)(即0.732)被相同的數量舍入。
當將一組均勻分佈的分數部分舍入一組固定點時,所有值的捨入誤差,而省略了0.5個部分的零件,將在統計上相互補償。這意味著,當刪除具有分數0.5的數字時,圓形數字的預期(平均)值等於原始數字的預期值。
實際上,通常使用浮點數,因為它們沒有平等的間隔,它們的計算差異更高。
一半
一個可能會使一半的一半(或一半朝上無限),這是一項搶七的規則,在許多學科中廣泛使用。也就是說, X的中途值總是四捨五入。
- 如果x的分數部分正好為0.5,則y = x + 0.5
例如,23.5被四捨五入為24,-23.5被四捨五入為-23。
但是,某些編程語言(例如Java,Python)將它們的一半定義為距離這裡的零的一半。
此方法只需要檢查一個數字即可確定兩者補充和類似表示形式中的圓形方向。
一半圓
與更常見的一半上的一半相反,一個人也可能會半下半下(或一半朝著無限的一半)。
- 如果x的分數部分正好為0.5,則y = x -0.5
例如,23.5被舍入到23,-23.5被舍入到-24。
但是,某些編程語言(例如Java,Python)將其半向下定義為一半朝零。
將一半朝零
一個人也可能朝零(或距離無窮大的一半左右)圓,而距離零的一半相反。
- 如果x的分數部分正好為0.5,則y = x -0.5如果x為正,則y = x + 0.5如果x為負。
例如,23.5被四捨五入至23,-23.5被舍入到-23。
該方法對稱地處理正值和負值,因此,如果原始數字為正或負相等,則沒有總體/負偏差。但是,它確實對零有偏見。
距離零一半
也可能會距離零(或一半朝Infinity )一半,這是一個普遍使用和使用的搶七規則,即:
- 如果x的分數部分正好為0.5,則y = x + 0.5如果x為正,則y = x -0.5如果x為負。
例如,23.5被四捨五入到24,-23.5被舍入到-24。
這在二進制計算機上可以更有效,因為只需要考慮第一個省略的位才能確定它是圓形的(在1)還是向下(在0)。由於其簡單性,這是一種舍入到重要數字時使用的方法。
該方法(也稱為商業舍入)對稱地處理正值和負值,因此,如果原始數字為正或負相等,則沒有總體正/負偏差。但是,它確實具有偏差為零。
它通常用於貨幣轉換和價格回合(首先將金額轉換為貨幣最小的細分(例如歐元的美分)時,它很容易通過考慮第一個分數數字而獨立於補充,很容易解釋精確數字或金額的符號(對於付款和收件人之間的嚴格等價)。
舍入一半
一個人也可能會一半到一半,這是一項勝利的規則,沒有正/負偏見,而沒有偏見/遠離零的偏見。按照此慣例,如果x的分數為0.5,則y是最接近x的整數。因此,例如,23.5變為24,24.5也是如此。但是,-23.5變為-24,−24.5也是如此。此函數在匯總圓形數字時最小化預期誤差,即使輸入大部分是正面的或大部分為負的,只要它們既不是偶爾也不是奇怪的,否則這些誤差。
這種循環的方法的這種變體也稱為收斂舍入,統計學家的圓形,荷蘭圓形,高斯圓形,奇怪的圓形或圓形或銀行家的捨入。
這是IEEE 754操作中使用的默認舍入模式,用於二進制浮點格式的結果,也是捨入到重要數字時使用的更複雜的模式。
通過消除偏差,重複的添加或減去獨立數字(如一維隨機步行中)將給出一個圓形結果,誤差往往與操作數量的平方根成比例地生長,而不是線性。
但是,該規則通過增加相對於賠率增加的概率來扭曲分佈。通常,這不如該方法消除的偏見重要。
將一半舍入奇數
一個人也可以將一半到奇數,這是一條類似的勝利規則,即偶到一半。在這種方法中,如果x的分數部分為0.5,則y是最接近x的奇數整數。因此,例如,23.5變為23,22.5也是如此。而-23.5變為-23,而-22.5也是如此。
如果要捨入的數字既不是既不是奇數,否則該方法也沒有正/負偏差和偏見/遠離零的偏差。它還共享一半的一半,甚至可以扭曲原始分佈的財產,因為它增加了相對於evens的賠率。這是英國將其貨幣十足時用於銀行餘額的方法。
該變體幾乎從未在計算中使用,除了要避免增加浮點數的規模的情況下,該數字的規模有限。隨著一半均勻的一半,無限的數字將圓形到無窮大,而較小的變性值將圓形為正常的非零值。有效地,這種模式更喜歡保留現有的紐帶規模,在可能的數字系統(例如二進制和十進制)的數字系統時避免了範圍的結果。
四捨五入以準備較短的精度
這種舍入模式用於避免使用雙(包括多個)舍入的錯誤結果。通過這種舍入模式,如果使用RPSP完成除最後一個圓形以外的所有圓形,則可以避免錯誤的結果,並且只有最終的圓形使用外部請求的模式。
使用十進制算術,如果在最小的數字0或1、4或5、5、5或6、9或0之間有選擇,則應選擇與0或5不同的數字;否則,選擇是任意的。 IBM定義了在後一種情況下,應選擇具有較小幅度的數字。 RPSP可以使用兩個隨之而來的圓形之間的步驟應用,例如一個數字(例如,可以在四捨五入到1/100後舍入到1/10)。例如,到達整數時,
- 20.0被舍入到20;
- 20.01,20.1,20.9,20.99,21,21.01,21.9,21.99被四捨五入到21;
- 22.0,22.1,22.9,22.99被舍入到22;
- 24.0,24.1,24.9,24.99被四捨五入到24;
- 25.0被舍入到25;
- 25.01,25.1被四捨五入到26。
在“雙舍入”部分的示例中,將9.46到一個小數點給出9.4的圓形,而整數又可以給9.4。
使用二進制算術,將舍入為“圓形到奇數”(不與“半圓向奇數”混合。),例如,舍入到1/4:
- x == 2.0 =>結果為2
- 2.0 <x <2.5 =>結果為2.25
- x == 2.5 =>結果為2.5
- 2.5 <x <3.0 =>結果為2.75
- x == 3.0 =>結果為3.0
對於正確的結果,應在至少2個二進制數字的步驟中應用RPSP,否則可能會出現錯誤的結果。例如,
- 3.125 RPSP至1/4 =>結果為3.25
- 3.25 RPSP至1/2 =>結果為3.5
- 3.5圓對1 =>結果是4(錯誤)
如果步驟為2位或更多位,則RPSP給出3.25,而整數又圓向整個圓形的圓形到圓形。
RPSP在IBM ZSeries和Pseries中的硬件中實現。
隨機舍入到整數
交替的搶七
一種比大多數人更晦澀的方法是在以0.5分部分的數字四捨五入時交替。所有其他人都屬於最接近整數。
- 每當分數部分為0.5時,請向上或向下進行交替舍入:對於第一次出現0.5個部分部分,圓形,第二次出現,圓形下方等等。或者,可以通過隨機種子確定第一個0.5分段圓形。 “向上”和“下降”可以是相互反對的任何兩種圓形方法 - 朝著正面的無窮大或遠離零。
如果發生0.5個部分的發生明顯超過“計數”的重新啟動,則實際上是無偏見的。有了保證的零偏見,如果要求和或平均數字,則很有用。
隨機的搶七
- 如果x的分數部分為0.5,請在x + 0.5和x -0.5之間隨機選擇y ,具有相等的概率。所有其他人都屬於最接近整數。
就像圓向半到半到圓的圓形到圓形一樣,該規則本質上沒有整體偏見,但在偶數和奇怪的y值中也是公平的。優於替代搶七的優勢是,在0.5部分零件上圓形的最後一個方向不必“記住”。
隨機舍入
圓形如下,最接近的整數朝向負相關和朝向正無窮大的整數,其概率取決於接近度,稱為隨機舍入,將平均產生無偏見的結果。
例如,1.6將以0.4的概率為1.6,概率為0.6。
隨機圓形可以以永遠無法圓形功能的方式準確。例如,假設一個人以0開頭,並將0.3添加到100次,同時每次添加之間的運行總數。結果將為0進行定期舍入,但是隨機舍入,預期的結果將為30,這是相同的值,而無需舍入。這對於機器學習可能很有用,訓練可能會使用低精度算術迭代。隨機舍入也是實現一維抖動的一種方法。
比較舍入整數的方法
價值 | 功能方法 | 隨機方法 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
定向舍入 | 圓形到最近 | 圓形準備較短的精度 | 交替的搶七 | 隨機的搶七 | 隨機 | ||||||||||||
向下 (朝向−∞ ) | 向上 (朝向 + ∞ ) | 朝0 | 遠離0 | 半下 (朝向−∞ ) | 一半 (朝向 + ∞ ) | 一半朝0 | 距離0 | 一半到一半 | 一半奇怪 | 平均的 | SD | 平均的 | SD | 平均的 | SD | ||
+1.8 | +1 | +2 | +1 | +2 | +2 | +2 | +2 | +2 | +2 | +2 | +1 | +2 | 0 | +2 | 0 | +1.8 | 0.04 |
+1.5 | +1 | +1 | +1 | +1.505 | 0 | +1.5 | 0.05 | +1.5 | 0.05 | ||||||||
+1.2 | +1 | +1 | +1 | +1 | 0 | +1 | 0 | +1.2 | 0.04 | ||||||||
+0.8 | 0 | +1 | 0 | +1 | +0.8 | 0.04 | |||||||||||
+0.5 | 0 | 0 | 0 | +0.505 | 0 | +0.5 | 0.05 | +0.5 | 0.05 | ||||||||
+0.2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +0.2 | 0.04 | ||||||||
−0.2 | −1 | 0 | −1 | −1 | −0.2 | 0.04 | |||||||||||
−0.5 | −1 | −1 | −1 | −0.495 | 0 | −0.5 | 0.05 | −0.5 | 0.05 | ||||||||
−0.8 | −1 | −1 | −1 | −1 | 0 | −1 | 0 | −0.8 | 0.04 | ||||||||
−1.2 | −2 | −1 | −1 | −2 | −1.2 | 0.04 | |||||||||||
−1.5 | −2 | −2 | −2 | −1.495 | 0 | −1.5 | 0.05 | −1.5 | 0.05 | ||||||||
−1.8 | −2 | −2 | −2 | −2 | 0 | −2 | 0 | −1.8 | 0.04 |
四捨五入其他值
舍入指定的多個
最常見的圓形類型是捨入整數。或者,更一般而言,要增加一些增加的整數倍數,例如,到整個十分之一秒,百分之一的一美元,到整個1/2或1/8英寸的整個倍數,到整個數十個或成千上萬的倍數,等等。
通常,將數字x舍入到某些指定的正值m的倍數中,需要以下步驟:
例如,將x = 2.1784美元到全美分(即0.01的倍數)需要計算2.1784 / 0.01 = 217.84,然後將其舍入218,最後計算218×0.01 = 2.18。
當四捨五入到預定數量的顯著數字時,增量m取決於要捨入數的數量(或圓形結果)。
增量m通常是用於表示數字的任何數字系統的有限分數。對於向人類展示,這通常意味著十進制數字系統(即M是整數乘以10的功率,例如1/1000或25/100)。對於存儲在數字計算機中的中間值,通常意味著二進制數字系統( M是2個整數乘以2的功率)。
從任意實際值返回整數的抽象單詞“ round()”函數至少在整個整數部分中介紹了十二個不同的具體定義。此處正式定義了抽象的兩詞“ roundtolultiple()”函數,但是在許多情況下,它與隱式值m = 1用於增量,然後還原為等效的抽象單題詞函數,也具有相同的十二獨特的具體定義。
對數圓形
四捨五入指定的力量
從舍入到指定的倍數,四捨五入到指定的功率大不相同。例如,在計算中需要將數字舍入數字為2的整個功率是很常見的。通常,將正數x舍入為1的冪x以外的某些正數為1的冪為:
許多適用於四捨五入倍數的警告適用於四捨五入。
縮放舍入
這種類型的捨入也被命名為對數尺度的捨入,是舍入到指定功率的變體。通過獲取數量的日誌並將正常的捨入到對數尺度上的最接值,可以在對數刻度上進行四捨五入。
例如,電阻在對數刻度上提供了首選數字。特別是,對於10%精度的電阻器,它們提供了標稱值100、120、150、180、220等。圓形到10( E12系列)的倍數。如果計算表示需要165歐姆的電阻,則log(150)= 2.176,log(165)= 2.217和log(180)= 2.255。 165的對數更接近180的對數,因此,如果沒有其他考慮,則將成為180歐姆電阻器。
一個值x∈ ( a , b )彈到a還是B是否取決於平方值x 2是否大於或小於乘積ab 。電阻示例中的值165回合至180,因為165 2 = 27225大於150×180 = 27000 。
浮點舍入
在浮點算術中,舍入旨在將給定值x變成具有指定數字數字數量的值y 。換句話說, y應該是數字m的倍數,該倍數取決於x的大小。數字m是浮點表示的基座(通常為2或10)的功率。
除了此細節外,上面討論的所有捨入的變體也適用於浮點數的圓形。在上面的縮放圓形部分中顯示了這種舍入的算法,但具有恆定的縮放因子s = 1,並且整數鹼基b > 1。
如果“遠離零”時,圓形結果將溢出定向舍入的結果是適當的簽名無窮大,或者是最高代表的正限定數(或最低代表的負有限數,如果x為負),則在“舍入”時朝零”。對於通常的圓形到最接近的情況,溢出的結果始終是適當的無窮大。
舍入簡單的部分
在某些情況下,希望將一個給定的數字x繞到“整潔”分數,即,即將分數y = m / n的分數m和分母n不超過給定的最大值。這個問題與將值四捨五入到固定數量的十進制數字或二進制數字或給定單位m的倍數大不相同。這個問題與Farey序列,船尾冠樹和持續的分數有關。
舍入可用價值
成品木材,寫紙,電容器和許多其他產品通常僅以幾種標準尺寸出售。
許多設計程序描述瞭如何計算近似值,然後使用諸如“圓形到最近的標準值”,“圓形到最近的標準值”或“圓形到最近的標準值”之類的短語“圓”到某些標準尺寸。 。
當一組首選值在對數刻度上均勻間隔時,選擇最接近任何給定值的最接值的值可以看作是縮放圓形的形式。可以直接計算此類圓形值。
在其他情況下四捨五入
抖動和錯誤擴散
當將連續信號(例如聲波)數字化時,許多測量的總體效果比每個單獨測量的準確性更重要。在這種情況下,通常使用抖動和相關的技術(誤差擴散) 。一種稱為脈衝寬度調製的相關技術用於通過以可變的佔空比迅速脈動功率來實現慣性設備的模擬類型輸出。
誤差擴散試圖確保誤差平均最小化。當處理一個從一個到零的柔和斜率時,在前幾個項中輸出將為零,直到誤差和當前值的總和大於0.5,在這種情況下,輸出1是輸出的,並且從誤差中減去差異迄今為止。數字化圖像時, Floyd -Steinberg抖動是流行的錯誤擴散程序。
作為一維的例子,假設數字0.9677 , 0.9204 , 0.7451 ,和0.3091按順序進行,每個都應舍入到一個倍數0.01 。在這種情況下,累積總和, 0.9677,1.8881 = 0.9677 + 0.9204,2.6332 = 0.9677 + 0.9204 + 0.9204 + 0.7451和2.9423 = 0.9677 + 0.9677 + 0.9204 + 0.7451 + 0.7451 + 0.3091 0.01 : 0.97 , 1.89 , 2.63 ,和2.94 。其中的第一個以及相鄰值的差異給出了所需的圓形值: 0.97,0.92 = 1.89 - 0.97,0.74 = 2.63 - 1.89和0.31 = 2.94 - 2.63 。
蒙特卡洛算術
蒙特卡洛算術是蒙特卡洛方法中的一種技術,其中圓形是隨機上下的。隨機舍入可用於蒙特卡洛算術,但通常,通常會以同樣的概率向上或向下舍入。重複運行將給出結果的隨機分佈,以表明計算的穩定性。
用圓形算術的精確計算
可以使用圓形算術來評估具有整數域和範圍的函數的確切值。例如,如果已知整數n是完美的正方形,則可以通過將n轉換為浮點值z來計算其平方根,從而將z的近似平方根x計算為floing Point最近的整數y 。如果n不大,則x中的浮點圓形誤差將小於0.5,因此圓形值y將是n的確切平方根。這本質上就是為什麼可以將幻燈片規則用於精確算術的原因。
雙圓
連續兩次將數字舍入到不同級別的精度,而後者的精度更加粗糙,不能保證與將圓形舍入的結果相同,除非在定向舍入的情況下。例如,將9.46舍入到一個小數中的9.46給出9.5,然後在使用圓形的一半到整數時將其舍入整數時,但是直接將其舍入整數時,將給出9個。 Borman和Chatfield討論了將舍入數據與一個使用整數表達的規範限制的數據進行比較時的雙舍入的含義。
在1995年至1997年之間的Martinez訴Allstate訴Allstate和Sendejo訴Farmers案中,保險公司認為允許雙重舍入溢價,實際上是必需的。美國法院對保險公司裁定,並命令他們採用規則以確保單一舍入。
一些計算機語言和IEEE 754-2008標準規定,在直接計算中,結果不應兩次舍入。這是Java的特殊問題,因為它被設計為在不同的機器上相同運行,必須使用特殊的編程技巧來使用X87浮點來實現此目標。更改Java語言以允許不同的結果,而差異無關緊要,並且在結果必須準確地符合時需要使用嚴格的FFP預選賽;嚴格的浮點已在Java 17中恢復。
在某些算法中,以較大的精度計算中間結果,然後必須將其四捨五入為最終精度。可以通過為中間計算選擇足夠的捨入來避免雙舍入。這包括避免到達最終舍入的中點(確切的中點時)。在二進制算術中,這個想法是將結果舍入零,如果圓形結果不精確,將最小的位設置為1;這個圓形稱為粘性舍入。同等地,當它完全表示時,它返回中間結果,而最近的浮點數為奇數,否則為奇數。這就是為什麼它也被稱為圓形的原因。用於二進制和十進制算術的具體實施是為了準備較短的精度。
餐桌製造商的困境
沒有人知道每兩個浮點參數正確地計算Y W的費用是多少,在該論點中不會超過/底流。取而代之的是,信譽良好的數學庫計算基本的先驗功能,主要是在一半以上的ULP之內,並且幾乎總是在一個ULP內。為什麼不能在像SQRT這樣的半ULP之內將Y W舍入?因為沒有人知道它會花費多少計算...沒有一般的方式來預測必須攜帶多少位數字來計算先驗表達式並將其正確舍入到一些預先簽名的數字數字。即使是(如果是真的),最終數字有限的額外數字也可能是一個深度的定理。
IEEE 754浮點標準可以保證,添加,減去,乘,分隔,融合乘以添加,平方根和剩餘的浮點,將給出無限精確操作的正確圓形結果。在1985年的標準中沒有提供這種更複雜功能的保證,通常它們最多只能在最後一位才能準確。但是,2008年的標准保證了符合的實現將給出正確的圓形結果,以尊重主動舍入模式。但是,功能的實現是可選的。
使用Gelfond – Schneider定理和Lindemann-Weierstrass定理,可以證明許多標準基本功能可以返回先驗結果,除了一些眾所周知的參數。因此,從理論的角度來看,總是有可能正確地圍繞此類功能。但是,對於實現此類功能,確定給定精度的限制,即在確保正確的圓形結果之前,可能需要大量的計算時間或可能無法觸及。實際上,如果未知該限制(或僅知道一個很大的界限),則必須在實施中做出一些決定(見下文);但是,根據概率模型,當使用中間精度的數字數量是目標格式的數字數量的兩倍加和一些小常數(考慮到特殊情況之後)時,可以以很高的可能性來滿足正確的捨入(考慮到特殊情況)。
一些編程軟件包提供正確的捨入。 GNU MPFR軟件包給出了正確圓形的任意精度結果。其他一些庫以雙重精度實現了基本功能:
- 由亞伯拉罕·齊夫(Abraham Ziv)和莫西·奧爾尚斯基(Moshe Olshansky)在1999年為Java代表Java的數學圖書館的IBM的ML4J ,正確地僅舍入到最近。據稱該庫是可移植的,但僅提供了PowerPC / AIX , SPARC / SOLARIS和X86 / Windows NT的二進製文件。根據其文檔,該庫使用的第一步具有比雙重精度要大一點的第一步,基於雙雙算術的第二步,以及基於IEEE 754 Double Excision的數組的768位精度的第三步,第三個步驟浮點數字。
- IBM準確的便攜式數學庫(縮寫為Apmathlib或Just Mathlib),也稱為Libultim,僅在舍入到最接近。該庫最多使用768位的工作精度。它於2001年被包括在GNU C庫中,但從2018年到2021年,“慢速路徑”(提供正確的捨入)被刪除。
- Crlibm,寫在舊的Arénaire團隊(Lip, Ens Lyon )上,最初於2003年首次分發。它支持4個圓形模式,並使用最困難的案例來證明。
- Sun Microsystems的Libmcr,在4個圓形模式下。對於困難的情況,該庫還使用多個精度,並且每次發生餐桌的困境時,單詞數量增加2(在達到機器的某些限制的情況下,不確定的行為)。
- 使用最困難的案例的知識,Core-Math項目在4個圓形模式中為X86-64處理器提供了一些正確的圓形功能。
存在可計算的數字,無論計算多少位數字,都無法確定圓形值。不能給出特定的實例,但這是由於停止問題的不確定性。例如,如果Goldbach的猜想是真實但無法證明的,則無法確定以下值將以下值舍入到下一個整數的結果:要么1+10 -n ,其中n是第一個偶數數字大於4,而不是4兩個素數,如果沒有這樣的數字,則為1個。如果存在這樣的數字,則圓形結果為2,否則為1個。但是,即使猜想是無法證明的,舍入之前的值也可以近似於任何給定的精度。
與字符串搜索的互動
舍入可能會對數字的字符串搜索產生不利影響。例如,四捨五入到四位數的π是“ 3.1416”,但對此字符串的簡單搜索不會發現“ 3.14159”或任何其他π圓形的其他值,將其繞到超過四位數。相比之下,截斷不會遭受這個問題的困擾。例如,對“ 3.1415”的簡單字符串搜索,該搜索被π截斷為四個數字,將發現π截斷為四個數字以上的值。
歷史
舍入的概念非常古老,也許比劃分本身的概念還要古老。在美索不達米亞發現的一些古老的粘土片中包含具有圓形值和平方根的圓形桌子,基礎60。圓形近似值,一年的長度和本月的長度也很古老,請參見基礎60個例子。
自1940年以來,該圓頭方法一直是ASTM (E-29)標準。術語無偏的圓形和統計學家的圓形的起源是相當不言而喻的。在1906年第四版的概率和錯誤理論中,羅伯特·辛普森·伍德沃德(Robert Simpson Woodward)稱這是“計算機的規則”,這表明當時人類計算機的常用使用了計算數學表。丘吉爾·艾森哈特(Churchill Eisenhart)表示,到1940年代的數據分析中,這種做法已經“確立了”。
一詞銀行家的圍繞術的起源仍然更加晦澀。如果這種四捨五入的方法是銀行業的標準,則證據證明很難找到。相反,歐洲委員會第2條報告了歐元的引入和貨幣匯集的引入表明,以前沒有在銀行業中進行舍入的標準方法;它指定“中途”的金額應舍入。
直到1980年代,浮點計算機算術中使用的捨入方法通常由硬件修復,記錄不足,不一致,並且對於每個計算機的品牌和模型都不同。大多數計算機製造商採用了IEEE 754浮點標准後,這種情況發生了變化。該標准允許用戶在幾種圓形模式中進行選擇,並且在每種情況下都可以準確指定如何將結果四捨五入。這些功能使數值計算更具可預測性和無關,並使間隔算術的有效實現成為可能。
目前,許多研究往往會繞到5或2的倍數。他提出了ABCC索引,該指數可以比較可能的區域之間的算法,而無需衡量人口素養的任何歷史資源。
編程語言中的四捨五入功能
大多數編程語言都提供功能或特殊語法,以各種方式將分數數字彙總。最早的數字語言,例如Fortran和C ,通常只提供一種方法,通常是截斷(向零)。可以在某些情況下暗示此默認方法,例如將分數編號分配給整數變量時,或將分數數字作為數組的索引。其他類型的捨入必須明確編程;例如,可以通過添加0.5並截斷來實現將正數舍入正數。
但是,在過去的幾十年中,大多數語言的語法和標準庫通常至少提供了四個基本的圓形功能(向上,向下,最接近和朝零)。罷權方法可能會根據語言和版本而有所不同,也可以由程序員選擇。幾種語言遵循IEEE 754浮點標準的領導,並將這些功能定義為採用雙精度浮點參數並返回相同類型的結果,然後在必要時可以將其轉換為整數。這種方法可能會避免虛假溢出,因為浮點類型的範圍比整數類型更大。某些語言(例如PHP )提供了將值圍繞的功能,即指定數量的十進制數字(例如,從4321.5678到4321.57或4300)。此外,許多語言都提供了printf或類似的字符串格式功能,該功能允許一個人將分數數字轉換為字符串,該字符串被舍入到用戶指定數量的小數位置(精度)。另一方面,截斷(圓形至零)仍然是許多語言使用的默認舍入方法,尤其是對於兩個整數值的劃分。
相比之下, CSS和SVG不能定義任何特定的數字和測量最大精度,它們在DOM和IDL界面中的對待和暴露為字符串,就像它們具有無限的精度一樣,並且不會區分整數和浮點數值;但是,這些語言的實現通常會將這些數字轉換為IEEE 754雙精度浮點值,然後以有限的精度公開計算的數字(尤其是在標準JavaScript或Ecmascript接口綁定中)。
其他四捨五入標準
一些學科或機構已發布了用於舍入的標准或指令。
美國天氣觀察
在1966年中期發布的一項指南中,美國氣象學協調員辦公室確定,天氣數據應舍入到最近的回合數中,並帶有“一半的一半”搶七冠軍規則。例如,將1.5舍入整數應變為2,-1.5應變為-1。在此日期之前,搶七的規則是“距離零的一半”。
氣象零負零
一些氣象學家可能會寫“ -0”,以指示溫度在0.0至-0.5度之間(獨家),該溫度被舍入整數。當視頻符號被認為重要時,無論大小有多小時,都會使用該符號;例如,在攝氏刻度中的溫度舍入時,零以下表示凍結。