gpt4 book ai didi

PI的连分数展开不准确?

转载 作者:行者123 更新时间:2023-12-05 03:18:53 25 4
gpt4 key购买 nike

我正在尝试编写一个 Windows C 程序 (Visual C++ 2019) 来生成 continued fraction expansion of π .

来自 WolframAlhpa 的正确值和 OEIS显示:

[3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1, 1, 2, 2, 2, 2, 1,

然而,我的值(value)观在 14 岁之后开始偏离

[3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 3, 3, 2, 1, 3, 2, 1, 19, 

这是一个 demo代码运行。

#include <stdio.h>
#include <stdint.h>
#include <math.h>

int main()
{
long double u = 3.1415926535897932384626433832795028841971693993751058209749445923;

printf("[%lld; ",(unsigned long long)u);

for (int i = 0; i < 20; i++)
{
u = 1.0 / (u - floorl(u));
printf("%lld, ",(unsigned long long)u);
}

return 0;
}

问题

代码是否丢失了某种小数精度,导致了不正确的值?

最佳答案

使用long double 常量。附加一个 L。否则,您的代码会将 double 值分配给 u 而不是 long double 值。

// long double u = 3.1415926535897932384626433832795028841971693993751058209749445923;
long double u = 3.1415926535897932384626433832795028841971693993751058209749445923L;

使用 L,我的输出接近预期:

[3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1, 1, 2, 2, 2, 1, 1,         My output
[3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1, 1, 2, 2, 2, 2, 1, 84, ... WolframAlhpa

WolframAlhpa 使用的精度超出了我的 long double


在某些实现中(我认为是 Visual C),doublelong double 具有相同的精度,在这种情况下附加一个 L不会改变任何事情。


u 声明之后添加 printf("%La\n", u); 以查看代码真正使用的值。

long double u = 3.1415926535897932384626433832795028841971693993751058209749445923L;
printf("%La\n", u);

0x1.921fb54442d1846ap+1 // Your output may differ.

它是正在计算的值(例如机器 pi)代码的连分数,而不是 π 的连分数.


旁白:

最好使用匹配说明符

//printf("[%lld; ",(unsigned long long)u);
printf("[%llu; ",(unsigned long long)u);

关于PI的连分数展开不准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73583919/

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