Julia中的精度

3

我在使用Julia时遇到了高精度计算的问题。我无法将精度设置为240位小数。目前我正在使用BigFloat包,这是目前对我来说最合适的。

以下是我的代码:

epsilon = big(10)^(-240)

a = BigFloat("1.0") + epsilon

println(a)

这是我的epsilon:1.000000000000000000000000000000000000000000000000000000000000000000000000000522e-240,有一个小错误"522",但我们现在将忽略它。 问题是我得到了a = 1.0。 我希望它是a = 1+10^-240 注意:我需要进行多个高精度计算,精确到250位小数,但我在Julia中定义这种高精度时遇到了问题。
1个回答

4

使用 setprecision 函数并设置 base=10

julia> setprecision(BigFloat, 250; base=10)
250

julia> epsilon = big(10)^(-240)
9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999991631e-241

julia> a = BigFloat("1.0") + epsilon
1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000005

我认为像1//BigInt(10)^BigInt(exp)这样做会很精确(除非由于某些原因,浮点数优先于有理数的精确表示)。 - AKdemy
是的,这将是精确的,但我假设 OP 想要使用 BigFloat,因为它比 Rational{BigInt} 更快。 - Bogumił Kamiński

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接