Algorithm 袖珍计算器如何简化分数并将不精确的数字保留为分数?

Algorithm 袖珍计算器如何简化分数并将不精确的数字保留为分数?,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不超过最大值。例如,如果将最大

有人能解释一下计算器(比如卡西欧袖珍计算器)是如何管理诸如“500/12”这样的方程式并能够返回“125/3”作为结果的吗?或者有人能说出一些算法来实现这一点吗

我所说的不精确数字是指不能用固定小数位数表示的数字,例如0.333


Windows calculator能够演示这一点,如果您执行“1/3”,您将得到“0.3333”作为答案,但如果将其乘以3,您将返回到“1”。

我的HP分数显示让我们为分数显示设置几种模式:

  • 设置最大分母。显示的分数最接近内部浮点值,且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
    ,一个未减少的分数

最大分母法的算法使用。Python中的limit_denominator方法中有一个简单的示例

精确分母法的方法更简单。给定分母d和浮点数x,分子就是四舍五入到最接近的整数。然后通过计算

或者,可以用显示的分数替换原始浮点数。这称为捕捉到栅格。这样,您可以输入0.333来创建一个正好等于
1/3
的分数。这使您可以在不进行舍入的情况下执行精确的分数算术


希望这个答案为您澄清一切:-)如果有任何零件需要详细说明或进一步解释,请告诉我。

我建议您查看GMP库的。在某些情况下,您需要在计算中接受有限精度,除非操作顺序特别简单。非理性(超越函数/常数)只能近似,例如,作为连分数。

一个人不能简单地。。。。将不精确的数字保留为分数。Windows calculator并没有做任何花哨的事情——它只是一种情况,即结果非常接近1,在IEEE浮点数中四舍五入为1。