我编写了一个简单的代码,试试我的新计算机上的编译器是否正常工作。编译/构建项目没有问题。该程序应该通过递归计算阶乘,它工作正常但只有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;
}
答案 0 :(得分:2)
不应该是:
double factorial(double x)
否则会将您的号码转换为int并溢出。
编辑:您是否禁用了警告?我认为factorial(x)调用应该发出关于失去精度的警告......