有人可以解释计算器(例如卡西欧口袋)如何管理诸如'500/12'之类的方程并且能够返回'125/3'作为结果,或者可以有人为某些算法命名吗?
不精确的数字是指无法用固定的小数位数表示的数字,例如0.333重复出现。
Windows计算器能够证明这一点,如果你执行'1/3',你会得到'0.3333333333333333'作为答案,但是如果你把它乘以3你将会回到'1'。
答案 0 :(得分:1)
我的HP分数显示让您为分数显示设置几种模式:
设置最大分母。显示的分数最接近内部浮点值n/d
,而 d 超过最大值。例如,如果最大值设置为10,则 pi 的浮点数最接近分数22/7
。但是,如果最大值为1000,则最近的分数为355/113
。
设置精确分母并减少结果。显示的分数是最接近内部浮点值的n/d
,其中 d 等于精确分母。计算出 n 之后,该分数将被最大公分母减少。例如,如果分母固定为32,则浮点数0.51最接近16/32
,后者将减少到1/2
。同样,浮点数0.516最接近17/32
,这是不可简化的。
设置精确分母,不要减少结果。例如,0.51显示为16/32
,未减少的部分。
最大分母方法的算法使用continued fractions。可以在http://hg.python.org/cpython/file/2.7/Lib/fractions.py#l206的limit_denominator方法中找到Python中易于理解的示例。
精确分母方法的方法更容易。给定分母 d 和浮点数 x ,分子只是d * x
四舍五入到最接近的整数。然后通过计算greatest common divisor.
n/d
可选地,原始浮点数可以由显示的分数代替。这被称为对齐网格。这样,您可以输入0.333以创建完全等于1/3
的分数。这使您可以在不进行舍入的情况下进行精确的小数运算。
希望这个答案为你清除一切:-)如果有任何部分需要详细说明或进一步解释,请告诉我。
答案 1 :(得分:1)
我建议您查看GMP库的rational number functions。在某些时候,除非操作顺序特别简单,否则您需要在计算中接受有限精度。不合理(超越函数/常数)只能近似,例如,作为连续分数。