需要帮助理解C ++中的Math

时间:2015-09-29 21:36:45

标签: c++ math

嘿伙计们我正在做一个额外的学分计划,我让它运行,但我使用它的每一个输入总是最终为1.任何人都可以指出我正确的方向,我搞砸了,谢谢你

#include<stdio.h>
#include<math.h>
#define Euler 2.718282
#define Pi 3.141593

int main(void)
{
    int n;
    int n_fact(int n);

    printf("Enter n: ");
    scanf_s("%d", &n);

    while (n < 0)
    {
        printf("The n value must not be negative");

        printf("Enter the value of n: ");
        scanf_s("%d", &n);
    }
    printf("n! Stirling approximation value about %i is %i ", n, n_fact(n));

    getchar();
    getchar();
    return 0;


}


int n_fact(int n)
{
    if (n == 0)
    {
        return 0;
    }
    else
    {
        return (int)(1 + 1 / (12 * Euler) + 1 / (288 * n*n) - 139 / (51840 * n*n*n));
    }
}

1 个答案:

答案 0 :(得分:2)

由于整数运算,特别是整数除法,你在这里遇到了问题:

return (int)(1 + 1 / (12 * Euler) + 1 / (288 * n*n) - 139 / (51840 * n*n*n));

你也错过了the formula的一个重要部分,所以即使使用浮点除法,上面的表达式仍然不会返回正确的值。

再看一下这个系列:

enter image description here

为了评估这一点,你需要(a)在整个过程中使用浮点数;(b)你还需要包含sqrt(2 * pi * n) * pow(n / e, n)项。但是,您可以省略除系列的前几个术语之外的所有术语,这取决于所需的准确性(显然,您的作业只需要使用前四个术语)。