与g ++相比,当我使用mingw编译时,为什么我的程序提供完全不同的输出

时间:2011-12-15 05:46:30

标签: c++ g++ mingw

所以当我编译这段代码时(使用这里的mersenne twister: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 个答案:

答案 0 :(得分:1)

也许是因为你省略了return语句:

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

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

}

我很惊讶你没有收到任何警告或错误。

答案 1 :(得分:0)

pythag()不会返回任何内容,因为Loki试图在没有告诉你确切答案的情况下说。这意味着未指定返回值。

你为什么在main()中返回42? 8 - )