所以我知道关于浮点精度(和东西怎么样1.1可能不表示完全在二),所有这一切,但我想知道:那么如何,做数学有关的库实现无限的精确?换句话说,你会如何代表,例如1.1中精确地在二元?只是简要说明将是巨大的,我可以找出确切的细节,自己。谢谢。:)

有帮助吗?

解决方案

没有无限精度库,但有任意精度库。有关如何实施这些内容的详细信息,请阅读文档: - )

要准确地以二进制表示1.1,不能正确指出浮点数。如果将整数部分(1)存储为整数,并将小数部分(.1)存储为另一个整数,则可以表示它,然后您需要创建逻辑来处理这些结构。或者,它可以存储为分数(11/10),分母和分子都存储为整数。

其他提示

如果你真的意味着无限的精确度有两种选择:

  • 使用某种形式的懒惰的计算。然后你可以问一些高精密度为你喜欢"之后的"执行的计算(因为它是懒它实际上只完成然后).其缺点是,这是效率很低。你可以做到这一语言Haskell使用一个特别号码系统,其中表示重叠,例如基地2个数字-1,0,1.通常的代表性是不合适的,因为在说1你需要的无限的精确度决定之间的输出0 0.999...1 1.000...

  • 做计算的象征。代表整数,有理数,根,等等。这是必要的,如果你想决定平等,但也相当低效率的,并限于特殊情况。

未实现具有无限精度的数学库。它无法完成。除了作为分数之外,数字1/3不能以有限数量的比特来表示。像pi和e这样的超越数字无法以任何方式完全表现出来。

另一方面,可以使用巨大精度创建数学库。这都是为浮点值的尾数分配足够的位。

有一些几何的算法,取决于确切运算,所以如果你在CGAL图书馆,你将找到各种各样的精确数字类型是"封闭式"下的各种操作。也就是说,有没有办法使用受支持的操作而产生的一个结果,不能表示完全一致。

一些例子:

  • 整数被关闭在加法和乘法。

  • 有理数也是关闭在分,除特殊情况下为零。可以表示作为一个对整数。也见 合理数量的功能在GMP.例如1.1=11月10日时,可以表示为(11,10).

  • 一些类型,也被关闭下的平方根。

您也可以用十进制表示数字并进行十进制算术运算。在每个数字用二进制代码表示的意义上,底层表示是二进制的。每个数字 - 无论是小数点的左侧还是右侧 - 都被视为整数。算术然后逐个“手动”地完成。

基于十进制的库的一个例子是PHP中的BCMath。

虽然当我们讨论浮点数和数字时,Pax完全就在这里,但我相信有一个解决方案,但效率非常低。
您可以使用字符串来表示您的数字,字符串不会丢失精度。
每当你有一个像“0.0001”的数字时+“0.1”迭代两个字符串并仅将当前位置转换为int。
第1步:
0 + 0 = 0 - >转换为字符串并分配给data [0]。
第2步:
0 + 1 = 1 - >转换为字符串并分配给数据[1]。
第3步:
iter> “0.1”.lenght() - >停止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top