在c++中对double使用sqrt函数后结果变成-1#IND

具体代码为
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a,g,l,b,p,d,n,U,tg,vg,r1,r2,q,pi;
a=981;g=9.8;l=0.002;b=8.23*(10^(-3));p=0.101*(10^6);d=0.005;n=1.83*(10^(-5));
pi=3.14;
cout<<"U:";
cin>>U;
cout<<"tg:";
cin>>tg;
vg=(l/tg)*10000;
r1=9*n*vg/2/a/g;
r2=sqrt(r1);
q=18*pi*d/U/sqrt(2*a*g)*(sqrt(n*l/tg/(1+b/p/r2)))*(sqrt(n*l/tg/(1+b/p/r2)))*(sqrt(n*l/tg/(1+b/p/r2)));
cout<<vg<<endl<<r2<<endl<<q<<endl;
return 0;
}

b=8.23*(10^(-3));p=0.101*(10^6);d=0.005;n=1.83*(10^(-5))

在c语言中^是表示异或的意思,故这里的b,p,n都是负数了,应该改为用pow函数:

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    double a,g,l,b,p,d,n,U,tg,vg,r1,r2,q,pi;
    a=981;g=9.8;l=0.002;
    b=8.23*pow(10,-3);
    p=0.101*pow(10,6);
    d=0.005;
    n=1.83*pow(10,-5);
    pi=3.14;
    cout<<"U:";
    cin>>U;
    cout<<"tg:";
    cin>>tg;
    vg=(l/tg)*10000;
    r1=9*n*vg/2/a/g;
    r2=sqrt(r1);
    q=18*pi*d/U/sqrt(2*a*g)*(sqrt(n*l/tg/(1+b/p/r2)))*(sqrt(n*l/tg/(1+b/p/r2)))*(sqrt(n*l/tg/(1+b/p/r2)));
    cout<<vg<<endl<<r2<<endl<<q<<endl;
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-18
一般都是对负数进行sqrt才会导致这样,你调试看看,是不是用了负数。
第2个回答  2013-10-18
看看是不是对负数用sqrt了
相似回答