Computer science 有无除法的无损算法?

Computer science 有无除法的无损算法?,computer-science,Computer Science,所以像p*1/p=1这样的数学方程式在计算机中总是适用的?如果你把数字存储为分子/分母对,那么,是的,你可以使它无损 我的意思是,当数字10除以3时,它不是存储为3.3333333,而是存储为{10,3}对。这意味着,当你再乘以3时,它将变成10 当然,这可能并不适用于所有边缘情况。您仍然无法表示无理数,如PI或2的平方根,因为它们既不能表示为有限十进制序列,也不能表示为比率 但是,对于仅使用有理数的除法,我无法想象边缘情况下它不起作用。如果您将数字存储为分子/分母对,那么,是的,您可以使其无损

所以像p*1/p=1这样的数学方程式在计算机中总是适用的?

如果你把数字存储为分子/分母对,那么,是的,你可以使它无损

我的意思是,当数字10除以3时,它不是存储为3.3333333,而是存储为{10,3}对。这意味着,当你再乘以3时,它将变成10

当然,这可能并不适用于所有边缘情况。您仍然无法表示无理数,如PI或2的平方根,因为它们既不能表示为有限十进制序列,也不能表示为比率


但是,对于仅使用有理数的除法,我无法想象边缘情况下它不起作用。

如果您将数字存储为分子/分母对,那么,是的,您可以使其无损

我的意思是,当数字10除以3时,它不是存储为3.3333333,而是存储为{10,3}对。这意味着,当你再乘以3时,它将变成10

当然,这可能并不适用于所有边缘情况。您仍然无法表示无理数,如PI或2的平方根,因为它们既不能表示为有限十进制序列,也不能表示为比率


但是,对于仅使用有理数的除法,我无法想象边缘情况下它不起作用。

使用任意精度的算术库(如GNU GMP)来获得无限精度的数字。图书馆的网址为:


使用任意精度的算术库(如GNU GMP)来获得无限精度的数字。图书馆的网址为:


取决于你在做什么。如果p是一个有理数,那么有一些方法可以表示它,例如Python中的分数模块。如果p是任意表达式,则可以使用符号数学包。你需要更准确地定义你的问题。这取决于你在做什么。如果p是一个有理数,那么有一些方法可以表示它,例如Python中的分数模块。如果p是任意表达式,则可以使用符号数学包。你需要更精确地定义你的问题。“任意”不是“无限”的,虽然我想假设你知道,因为你引用了一个冒犯的术语:-我也很难推荐GMP用于任何健壮的代码,因为它有我认为对于一个通用的库缺陷来说致命的,因为它在内存耗尽时退出你的地毯。诚然,这只可能在最极端的情况下发生,但是,因为这是GMP将被使用的地方,所以我不太喜欢它。但对于那些不介意这种行为的代码来说,这是一个可行的选择,这里很可能就是这种情况。而且,虽然这只是个人经验,但我总是发现MPIR更易于讨论和帮助。YMMV。它们也可以使用本机窗口。“任意”不是“无限”的,虽然我想假设你知道,因为你引用了一个冒犯的术语:-我也很难推荐GMP用于任何健壮的代码,因为它有我认为对于一个通用的库缺陷来说致命的,因为它在内存耗尽时退出你的地毯。诚然,这只可能在最极端的情况下发生,但是,因为这是GMP将被使用的地方,所以我不太喜欢它。但对于那些不介意这种行为的代码来说,这是一个可行的选择,这里很可能就是这种情况。而且,虽然这只是个人经验,但我总是发现MPIR更易于讨论和帮助。YMMV。他们也使用本机Windows。