我不时地会收到关于我之前发布的一篇文章的提问和评论。
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,玩得太开心了……(至少我会这样。)
是的,舍入的重点在于哪种偏差适合你的数据。 小学方法偏向正无穷大。
并非所有偏差都围绕零对称。 小学方法也不是。
无论如何,谢谢!