Algorithm 袖珍计算器如何简化分数并将不精确的数字保留为分数?
有人能解释一下计算器(比如卡西欧袖珍计算器)是如何管理诸如“500/12”这样的方程式并能够返回“125/3”作为结果的吗?或者有人能说出一些算法来实现这一点吗 我所说的不精确数字是指不能用固定小数位数表示的数字,例如0.333Algorithm 袖珍计算器如何简化分数并将不精确的数字保留为分数?,algorithm,math,fractions,arbitrary-precision,Algorithm,Math,Fractions,Arbitrary Precision,有人能解释一下计算器(比如卡西欧袖珍计算器)是如何管理诸如“500/12”这样的方程式并能够返回“125/3”作为结果的吗?或者有人能说出一些算法来实现这一点吗 我所说的不精确数字是指不能用固定小数位数表示的数字,例如0.333 Windows calculator能够演示这一点,如果您执行“1/3”,您将得到“0.3333”作为答案,但如果将其乘以3,您将返回到“1”。我的HP分数显示让我们为分数显示设置几种模式: 设置最大分母。显示的分数最接近内部浮点值,且d不超过最大值。例如,如果将最大
Windows calculator能够演示这一点,如果您执行“1/3”,您将得到“0.3333”作为答案,但如果将其乘以3,您将返回到“1”。我的HP分数显示让我们为分数显示设置几种模式:
- 设置最大分母。显示的分数最接近内部浮点值,且d不超过最大值。例如,如果将最大值设置为10,则pi的浮点数最接近分数
。但是,如果最大值为1000,则最近的分数为22/7
355/113
- 设置精确的分母并减少结果。显示的分数是最接近内部浮点值的
,其中d等于精确分母。计算出n后,该分数按最大公分母减少。例如,如果分母固定为32,则浮点数0.51最接近n/d
,这将减少到16/32
。同样,浮点数0.516最接近不可约的1/2
17/32
- 设置精确的分母,不要减少结果。例如,0.51显示为
,一个未减少的分数16/32
1/3
的分数。这使您可以在不进行舍入的情况下执行精确的分数算术
希望这个答案为您澄清一切:-)如果有任何零件需要详细说明或进一步解释,请告诉我。我建议您查看GMP库的。在某些情况下,您需要在计算中接受有限精度,除非操作顺序特别简单。非理性(超越函数/常数)只能近似,例如,作为连分数。一个人不能简单地。。。。将不精确的数字保留为分数。Windows calculator并没有做任何花哨的事情——它只是一种情况,即结果非常接近1,在IEEE浮点数中四舍五入为1。