Почему моя программа выдает совершенно другой вывод, когда я компилирую с mingw по сравнению с g ++ - PullRequest
0 голосов
/ 15 декабря 2011

Поэтому, когда я скомпилирую этот код (используя твистер Мерсенна, найденный здесь: http://www -personal.umich.edu / ~ wagnerr / MersenneTwister.html ):

#include <iostream>
#include <cmath>
#include "mtrand.h"

using namespace std;
double pythag(double x, double y) {
    double derp=0;
    derp=(x*x)+(y*y);
    derp=sqrt(derp);
}

int main() {
    double x=0;
    double y=0;
    double pi=0;
    double hold1=0;

    double hold2=0;
    double hits=0;
    MTRand mt;
    mt.seed();
   // cout.precision(10);
    for(long i=1; i<=100000000000l; i++) {
        x=abs(mt.rand());
        y=abs(mt.rand());
        if(pythag(x,y)<=1) {
            hits++;
        }
        if(i%100000l==0) {
            pi=(4*hits)/i;
            cout << "\r" << i << "   " << pi ;
        }
    }
    cout  <<"\n";
    return 42;
}

Использование g ++ ("g ++ pi.cc -o pi") И запустив получившееся приложение, я получаю желаемый результат - подсчет числа Пи, рассчитанный методом Монте-Карло. Но, когда я компилирую с помощью mingw g ++ («i686-pc-mingw32-g ++ -static-libstdc ++ -static-libgcc pi.cc -o pi.exe») Я всегда получаю счет 0. Любая помощь с благодарностью.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Возможно, это потому, что вы пропустили оператор return:

double pythag(double x, double y) {
    double derp=0;
    derp=(x*x)+(y*y);
    derp=sqrt(derp);

    //  You're missing this!!!
    return derp;

}

Я был бы удивлен, что вы не получили никаких предупреждений или ошибок по этому поводу.

0 голосов
/ 15 декабря 2011

pythag () ничего не возвращает, как Локи пытается сказать, не сказав вам точного ответа. Это означает, что возвращаемое значение не указано.

Почему вы возвращаете 42 в main () ?! 8 -)

...