gpt4 book ai didi

printf - Julia 使用 @printf 打印错误的 Pi 数字

转载 作者:行者123 更新时间:2023-12-02 20:26:00 28 4
gpt4 key购买 nike

当我将 @printf("%.50f", pi) 的输出与 BigFloat(pi) 进行比较时,结果与第 16 位不同。这可能是由于类型反转造成的。但我喜欢更深入地了解这里发生的事情?


Julia > @printf("%.50f", pi)

   3.14159265358979311599796346854418516159057617187500

Julia > BigFloat(pi)

3.1415926535897932384626433832795028841971693993751058209749445923078164062861

最佳答案

pi 以及其他几个众所周知的无理数,都有自己的特殊类型 Irrational。这些以 Float64 精度存储,我不认为有任何计划在 v1.0 中改变这一点。

如果您想要更高的精度,请使用 BigFloat(pi),就像您在问题中所做的那样。

但这里的关键点是 @printf("%.50f", pi) 不会自动包装对 BigFloat(pi)< 的调用。/。要获得这种行为,您需要@printf("%.50f", BigFloat(pi))。您实际上在这里遇到的问题与 pi 本身无关,而是与 Julia 中打印 float 的方式有关(事实上,在大多数编程语言中)。要明白我的意思,请尝试:

@printf("%.50f", rand())

这本质上是要求 Julia 打印一个从 [0,1] 区间到小数点后 50 位的随机 Float64,这显然是一个超过小数点后 16 位的无意义请求。那么为什么在第 16 位之后会得到一大堆随机数呢?

以良好的人类可读格式快速准确地打印 Float64 本身就是一个主题。如果您真的对正在发生的事情感兴趣,那么 this article应该可以帮助您入门,但简单的答案是不要注意通常的浮点精度之后的任何内容

此外,据我所知,这种行为对于大多数编程语言来说都很常见。这不是您观察到的特定于 Julia 的行为,而是处理器级别的行为。

关于printf - Julia 使用 @printf 打印错误的 Pi 数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934200/

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