gpt4 book ai didi

小数点后 19 位及以上的数学精度

转载 作者:行者123 更新时间:2023-12-03 14:06:02 27 4
gpt4 key购买 nike

我有相同的数据集并运行相同的代码,但有时我会在小数点后 19 位及以后得到不同的结果。虽然对于小于 0.0001 的数字这对我来说不是一个大问题,但这让我想知道小数点后 19 位是否是 Raku 的精度限制?

     Word 104 differ: 
0.04948872986571077 19 chars
0.04948872986571079 19 chars
Word 105 differ:
0.004052062278212545 20 chars
0.0040520622782125445 21 chars

最佳答案

TL;DR 查看文档的优秀 Numerics页。

(在我写以下答案之前,我已经忘记了那个页面。这个答案充其量只是该页面几个方面的简要总结。)

这有两个方面。内部精度和打印精度。
100% 内部精度,直到 RAM 耗尽
Raku 支持任意精度的数字类型。报价 Wikipedia's relevant page :

digits of precision are limited only by the available memory of the host system


您可以指示 Raku 使用其任意精度类型之一。 [1] 如果你这样做,它将保持 100% 的精度,直到它用完 RAM。


任意精度型
对应类型检查 [2]
该类型的值示例


Int my Int $foo ... 66174449004242214902112876935633591964790957800362273
FatRat my FatRat $foo ... 66174449004242214902112876935633591964790957800362273 / 13234889800848443102075932929798260216894990083844716

因此,您可以获得整数和分数的任意内部精度(包括任意精度小数)。
有限的内部精度
如果您不指示 Raku 使用任意精度的数字类型,它会尽力而为,但最终可能会切换到有限精度。例如,如果您使用的公式计算出 Rat ,Raku 将放弃 100% 的精度。并且数字的分母超过 64 位。 [1]
Raku 的后备有限精度数字类型是 Num :

On most platforms, [a Num is] an IEEE 754 64-bit floating point numbers, aka "double precision".


报价 the Wikipedia page for that standard :

Floating point is used ... when a wider range is needed ... even if at the cost of precision.


The 53-bit significand precision gives from 15 to 17 significant decimal digits precision (2−53 ≈ 1.11 × 10−16).


打印精度
与内部精度不同的是数字的字符串化。
(正是在这个阶段,我记得在这个答案开头链接的 Numerics 文档页面。)
报价 Printing rationals :

Keep in mind that output routines like say or put ... may choose to display a Num as an Int or a Rat number. For a more definitive string to output, use the raku method or [for a rational number] .nude


脚注
[1] 您可以通过表达式中单个数字的类型以及数字运算结果的类型来控制数字表达式的类型,而这又取决于数字的类型。例子:
  • 1 + 23 , 一个 Int , 因为两者 12Int s 和 a + bInt如果两者都是 abInt小号;
  • 1 / 2不是 Int即使两者 12分别为 Int s,而是 1/2又名 0.5 , 一个 Rat .
  • 1 + 4 / 2将打印为 3 ,但 3内部是 Rat ,而不是 Int , 由于 Numeric infectiousness .

  • [2] 如果您尝试分配或绑定(bind)不是您指定为变量类型约束的数值类型的值,那么强制执行的所有操作都会生成运行时错误。强制执行并不意味着 Raku 会为您转换数字。您必须编写公式以确保获得的结果是您想要的。 [1] 您可以使用强制 - 但强制无法恢复已经丢失的精确度。

    关于小数点后 19 位及以上的数学精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66403291/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com