2011-03-25 58 views
1

因此,数学中的方程(如p * 1/p = 1)将始终保存在计算机中?是否有无损分割算法?

+2

取决于你在做什么。如果p是一个有理数,可以用一些方法来表示,例如Python中的'fractions'模块。如果p是一个任意表达式,则可以使用符号数学包。你需要更精确地定义你的问题。 – 2011-03-25 03:12:37

回答

6

如果你将你的号码存储为分子/分母对,那么,是的,你可以使它无损。由此,我的意思是数字10,除以3时,不是存储为3.3333333,而是存储为{10,3}。这意味着,当您再次乘以3时,它将变为10

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

但是,仅为了划分(使用有理数),我无法想象它不起作用的边界情况。

0

使用GNU GMP等任意精度算术库来获得“无限精度”数字。该库可在:

http://gmplib.org/

+0

'任意'不是'无限',虽然我会假设你知道,因为你引用了违规术语:-)我也很难推荐GMP的任何健壮的代码,因为它有(我认为是致命的对于一般用途的图书馆而言)当内存耗尽时退出的缺陷(从你的下面拉下地毯)。当然,这只是在最极端的情况下才有可能,但因为无论如何GMP都可以使用,所以我不是那么喜欢它。但是对于代码来说这是一个可行的选择,你不介意这种情况很可能就是这种情况。 – paxdiablo 2011-03-25 03:23:07

+0

而且,虽然仅仅是个人经验,但我总是发现MPIR(一种GMP叉)更适合讨论和协助。因人而异。他们也做本地Windows。 – paxdiablo 2011-03-25 03:27:12