2013-07-29 2 views
0

Я написал простой код, чтобы попробовать, правильно ли работает компилятор на моем новом компьютере. Нет проблем с компиляцией/сборкой проекта. Программа должна вычислять факторную рекурсию, и она работает нормально, но только под 13! (Это только около x * 10^9, двойное должно иметь диапазон до x * 10^308). Если я попробую более высокие цифры, это даст мне отрицательные результаты и т. Д. Я не могу выяснить, что вызывает проблему. На моем старом компьютере (32 бит win xp) работал тот же код, что и до 170! (но я не уверен, что это было точно так же, потому что основная часть моих данных была потеряна). Sholud Я переустанавливаю компилятор или что-то не так с настройками? Или мой код неверен?Слишком длинная переполнение C++ слишком рано

Мой текущий компьютер имеет 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; 
    } 

ответ

2

это не должно быть:

double factorial(double x) 

В противном случае это будет конвертировать число в междунар и переливом.

EDIT: У вас есть предупреждения отключены? Я думаю, что факториал (х) должен выпустить предупреждение о потере точности ...

+0

Да, определенно. Спасибо. Я чувствую себя немой, потому что это действительно элементарная ошибка, и я ее не заметил ... – Adam

 Смежные вопросы

  • Нет связанных вопросов^_^