【问题标题】:Calculating the value of PI but values are not being adding to variable计算 PI 的值,但值未添加到变量中
【发布时间】:2015-10-20 00:02:46
【问题描述】:

可以使用以下公式计算 PI:

π = 4 - 4/3 + 4/5 -4/7 +4/9 -4/11 ....

序列越远,获得的准确度就越高。我的代码似乎正确,我将值添加到变量pi。但是,一旦我打印了变量pi,我得到的只是零。怎么了?

#include <stdio.h>

int main()
{

    long double pi =0.0;
    long double num= 4.0;
    long double denom= 1.0;
    long int loop;
    long int accuracy;

    accuracy= 400000;

    printf("Accuracy set at: %ld\n", accuracy);
    printf("term\t\t pi\n");

    for(loop=1;loop<=accuracy; loop++)
    {
        if(loop%2 != 0)
        {
            pi += num/denom;
        }
        else{
            pi-= num/denom;
        }
        printf("%ld\t\t%lf\n", loop, pi);
        denom +=2.0;
    }
    return 0;

}

【问题讨论】:

  • 只是好奇 - 一切都有 4。为什么不把4个拿出来?是否有理由在扩展的每个术语中保留 4?
  • 它在表格的 PI 侧仅打印 0.000000。它应该越来越接近 3.1415
  • @MartinJames,这是问题给出的数学公式。如果我们把 4 去掉,我们就不会更接近 PI 的实际价值了。
  • 几乎相同的问题here和解释here

标签: c++ c algorithm


【解决方案1】:

我的 C 编译器在您的 printf 语句中给出了这条消息:

警告:格式指定类型“双”,但参数有类型 'long double' [-Wformat]

如果您使用%Lf 而不是%lf 来打印pi,也许可以?

【讨论】:

  • 是的。 Here 是结果。如果您使用 C++ 风格的流 (std::cout for example),这将不是问题。
  • 我正在使用 Dev C++ 编译它。我在 Ideone.com 中使用它,它工作得很好,就像你在这里展示的那样,但在我的 IDE 中并没有真正工作,我应该改用 Visual Studio 还是其他编译器?
  • @RodrigoProença 您能否在使用 Dev C++ 时尝试将标头 stdio.h 替换为 cstdio,看看是否得到正确的结果?
  • @RodrigoProença 如果使用 mingw-w64,您还必须在编译时包含 #define __USE_MINGW_ANSI_STDIO 1,以获得正确的行为。在其默认状态下,编译器存在错误。如果使用旧的 mingw,那么你应该升级到 mingw-w64。
【解决方案2】:

而不是 if / else 来处理交替加减:

for(loop=1;loop<=accuracy; loop++)
{
    pi += num/denom;
    printf("%d\t\t%Lf\n", loop, pi);
    denom += 2.0;
    num = -num;
}

【讨论】:

  • 我使用了这个,但我仍然得到 0 的 PI。
  • 我刚刚开始工作:将我的 pi 变量从 long double 更改为 just double。为什么它不能作为长双打?是否与我正在使用的编译器有关。
  • @RodrigoProença - 你用的是什么编译器?
【解决方案3】:

long double 中删除long。我测试了它,它似乎工作正常

【讨论】:

    【解决方案4】:

    你需要用它做一个合适的else if()

    for (int loop=1; loop<=accuracy; loop++) {
        if(loop%2 != 0)
          {
            i++;
            if (i%2==0)
              pi += num/denom;
            else
              pi -= num/denom;
          }
        denom++;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多