我不時地會收到關於我之前釋出的一篇文章的提問和評論。
http://www.cplusplus.com/forum/articles/3638
以下帖子是其中典型的例子:
匿名 說:
我正在編寫一段程式碼,用於模擬經濟學課程中的貨幣政策。在搜尋“ROUND”的正確語法/庫(顯然我不是程式設計師)時,我發現了您在 2008 年 8 月 18 日晚上 8:56 釋出的帖子(http://www.cplusplus.com/forum/articles/3638/#msg15562)。你在裡面說:
The round half down did exactly what it should have. Given a number
exactly halfway between two integers (12.5) it rounds down to 12. |
我不認為這是正確的,至少在我 1900 年代學到的方式中不是。 10 除以 2 可能確實等於 5,但它不是線性值之間的中間值。 你使用的方法似乎包含零作為一個值,但將其視為佔位符。 舍入的目的是決定是保持當前的量級還是跳到下一個量級,對嗎?
讓我們暫時避免列舉,假設有十個點 (@),並用 (|) 表示中點,這樣兩邊各有五個點:
@ @ @ @ @ | @ @ @ @ @
現在讓我們使用整數。 這是十進位制系統的十個(且僅有的十個)值/位置,具有相同的中點:
0 1 2 3 4 | 5 6 7 8 9
毫無疑問,該線位於零和九的中間。 如果要為該線分配一個十進位制值,它會是多少? 4.5? 不,因為同樣的問題會無限存在。 簡而言之,4 或更小的值向下舍入,5 或更大的值向上舍入。
你是否相信一個數學概念並不影響它的真理。
不過,不要感到難過,因為這個特殊點
確實令人困惑。 並且你透過混合符號和值而更加困惑自己。
鑑於你的十個點:
@ @ @ @ @ | @ @ @ @ @
讓我們
數數它們:
1 2 3 4 5 | 6 7 8 9 10
沒錯,正好有
十個點。
十的一半正好是五。
如果你想線性地做,你也可以這樣做,但你必須記得正確計數:
+--+--+--+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7 8 9 10
| | |
fewest the exact most
center |
線性地,零到十個點(我最少有零個,最多有十個)的中間是
五。 由於你仍然不確定,請繼續並計算每個數字之間有多少個空格。 注意,正好有十個。
毫無疑問,該線位於零和九的中間。 如果要為該線分配一個十進位制值,它會是多少? 4.5? 不,因為同樣的問題會無限存在。
你假設因為你的前提是真的,所以你的結論也是真的。 是的,該線位於零和九的中間。 但是它
正確的十進位制值
是 4.5。 你可以在你的圖中看到它,只需看看它。 這條線位於 4 和 5 的中間,即 4 + 0.5 = 4.5。
簡而言之,4 或更小的值向下舍入,5 或更大的值向上舍入。
你的斷言與歷史上和今天成千上萬合格、聰明的數學家的工作相悖。 我認為你應該重新思考你的立場。
作為你重新思考的一部分,你可以考慮你錯過了文章中的很大一部分重點。 舍入數字有
不止一種方法。 所謂的“小學”方法,或四捨五入(你所偏好的方法),是一種
有偏差的方法,並非總是有用。(實際上,它比人們想象的要無用,因為它對正在處理的資料做了一些假設。)
最後,你是在就一個與你正在考慮的
不同的舍入演算法來挑我的刺。 如果你正在比較這兩種演算法,那是一回事,但如果你沒有這樣做,那麼你本質上是在抱怨蘋果不是橙子。 在向下舍入
向下演算法中,與向上舍入
向上演算法不同,0.5 或更小的值
向下舍入,而所有其他值向上舍入。
我希望我已經更好地向你解釋了這一點。 祝你好運!
由於匿名人士在他上小學時發表了帖子,我也更改了日期。 我很想寫 19x0,但我認為人們會把這個讀成 2000 或 2011,玩得太開心了……(至少我會這樣。)
是的,舍入的重點在於哪種偏差適合你的資料。 小學方法偏向正無窮大。
並非所有偏差都圍繞零對稱。 小學方法也不是。
無論如何,謝謝!