des*_*est -5 floating-point computer-science
我一直在读浮点数,看看它们是什么,一个网站说这个.
物理学家需要在同一计算中同时使用光速(约300000000)和牛顿的引力常数(约0.0000000000667).为了满足工程师和芯片设计人员的需要,数字格式必须以非常不同的幅度提供数字的准确性.但是,只需要相对准确性.为了满足物理学家的要求,必须能够进行涉及不同数量的数字的计算.
基本上,具有固定数量的整数和小数位是没有用的 - 并且解决方案是具有浮点的格式.
我对第二段有两个问题.
floor((0.1+0.7)*10)正确(由于舍入误差*[源]计算为7,而不是8 ),它如何适用于从非常高到非常低的数字(如上面关于物理学家的引用),考虑到它无法使用0.1 - 8prev示例中的数字来计算正确的答案.为什么物理学家使用浮点计算,为什么不像其他人一样使用精确小数?我被告知不要用它们来赚钱,所以为什么要把它们用于科学
另外,如果计算floor((0.1+0.7)*10)或0.1 + 0.2 (等于0.30000000000000004)是如此困难,但不是整数,为什么计算机不能只计算没有小数点的((01 + 07) * 10)和01 + 02,或者然后将其放回到答案中(添加小数点1位数)从南方离开)?我知道一个比我年轻的17岁的孩子正在编写一个编译成javascript的编程语言.为什么程序员不能想到从总和中删除小数点(如果使用小数或负数的算术很难计算),然后将小数点放回到最终答案中?由于他们的主要错误,0.15 + 0.15并且0.1 + 0.2如果他们与==或相互比较,可以返回为假>=.这绝对是疯狂!
*7.9999999999999991118 ....
基础10被推荐用于财务计算,因为财务计算遵循其自己的标准(示例),其根据基础10计算定义"正确"结果.使用base-2浮点计算来模拟正确的计算是很困难的,因为它不能自然地与财务标准的基础10语言相匹配.
物理学没有基础10人类标准服从(物理学没有10个手指),所以任何基础都和其他基础一样好.你指出了一个基础2变坏的例子floor((0.1+0.7)*10),但同样容易使基数10变坏:floor(10 / 3 * 3) = 9以十进制计算任何精度.
事实上,任何计算涉及的问题floor在于floor不稳定:在争论一个小错误可能导致结果误差较大.如果你避免不稳定的计算,那么一个基础应该和你的实现一样好.当用逻辑电路实现时,二进制有几个优点.
0.15 + 0.15和0.1 + 0.2
在0和1之间存在无限多的有理数.其中,你清楚地期望0.15,0.1和0.2并且它们的总和被精确地表达.如果您有这些期望,那么基数10适合您.物理学家没有任何理由支持这些数字:他们使用π,G,我不知道的其他常数.即使其中一个常数恰好是0.1,物理学家也无法准确地表示它们的常数.物理学家对于在0和1之间的所有其他有理数上具有短十进制扩展的数字没有特别的偏好,其中绝大多数不会通过一个微不足道的计数参数完全表达.