0

我编写了一个简单的代码来尝试我的新计算机上的编译器是否正常工作。编译/构建项目没有问题。该程序应该通过递归计算阶乘,它可以正常工作,但只能在 13 以内!(它只有大约 x*10^9,double 应该有高达 x*10^308 的范围)。如果我尝试更高的数字,它会给我带来负面结果等。我无法找出导致问题的原因。在我的旧电脑(32 位 win xp)上,同样的代码可以正常工作到 170!(但我不确定它是否完全相同,因为我的数据的主要部分已经丢失)。Sholud我重新安装编译器还是设置有问题?还是我的代码不正确?

我目前的电脑有 64 位 win7 和 AMD 处理器。我现在正在使用 MS Visual Studio 2012 更新 2。

我是 C++ 的新手,也很抱歉我的英语不好。

这是我的代码:

    #include <iostream>

    using namespace std;

    int factorial(int x){
        if (x==2){ return 2;}
        return x*factorial(x-1);
    }

    int main()
    {
        double x,v;
        cout<<"insert number: ";
        cin>>x;
        v=factorial(x);
        cout<<"\n"<<v<<"\n";
        system("pause");
        return 0;
    }
4

1 回答 1

2

不应该是:

double factorial(double x)

否则,它会将您的数字转换为 int 并溢出。

编辑:您是否禁用了警告?我认为 factorial(x) 调用应该发出关于失去精度的警告......

于 2013-07-29T16:40:44.853 回答