C ++“double”变量太早溢出

时间:2013-07-29 16:38:17

标签: recursion double overflow factorial

我编写了一个简单的代码,试试我的新计算机上的编译器是否正常工作。编译/构建项目没有问题。该程序应该通过递归计算阶乘,它工作正常但只有13以下!(它只有大约x * 10 ^ 9,double应该有x * 10 ^ 308的范围)。如果我尝试更高的数字,它会给我带来负面结果等。我无法找出导致问题的原因。在我的旧电脑上(32位获胜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;
    }

1 个答案:

答案 0 :(得分:2)

不应该是:

double factorial(double x)

否则会将您的号码转换为int并溢出。

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