C++ math.h中的pow错误

C++ math.h中的pow错误,c++,c,pow,math.h,C++,C,Pow,Math.h,我被C语言中的这个错误所困扰,只是不知道出了什么问题。以下查询构成了我的代码的一个组成部分,用于在连续迭代中以指数方式增加值。以下是我编程的公式: 我已经对代码中的错误进行了注释 #include <math.h> #include <iostream> int main() { double maxMeshS = 0; double minMeshS = 0; cout << "enter max mesh size (m): "

我被C语言中的这个错误所困扰,只是不知道出了什么问题。以下查询构成了我的代码的一个组成部分,用于在连续迭代中以指数方式增加值。以下是我编程的公式:

我已经对代码中的错误进行了注释

#include <math.h>
#include <iostream>

int main()
{
    double maxMeshS = 0;
    double minMeshS = 0;

    cout << "enter max mesh size (m): ";
    cin >>maxMeshS;

    cout <<"\nenter min mesh size (m): ";
    cin >> minMeshS;

    double raise = maxMeshS/minMeshS; //Values used for run maxMeshS = .5
    double factor = 1/9;              //                    minMeshS = .005    

    double b = pow(raise,factor);
    cout << "b " << b << endl;  // The error happens here when I use above values
                               // b comes out to be 1 which should be 1.668100 instead
    double a = minMeshS/b;
    cout << "a " << a << endl;

    int x;
    cout << "enter x " ;
    cin >> x;

    double queryCube = a*pow(b,x);
    cout << queryCube << endl;
    return(0);
}
#包括
#包括
int main()
{
双maxMeshS=0;
双minMeshS=0;
cout>maxmesh;
小碎肉;
double raise=maxMeshS/minMeshS;//用于运行maxMeshS的值=.5
双因子=1/9;//minMeshS=.005
双b=功率(上升,系数);
cout你的系数是
(int)1/(int)9
,它是
(int)0;
几乎任何提升到零次方的值都是1 你可以这样做

double factor = 1/9.0; // make sure the 9 is a floating point

如果我没弄错的话,你必须把因子改为

double factor = 1.0/9;
问题是编译器确实将1/9视为整数除法,结果是0。
所以你计算零的幂,它总是1。

你需要一个
在那里(
9.L
至少),否则它将是一个
长的
@ShafikYaghmour添加了一个“几乎”为了清楚起见。
1/9L
仍然是零。
9L
是一个
long
,而不是
long-double
。你不想要
long-double
,你想要
double
。你想要
9。
(或
9.0
)@ShafikYaghmour,你在挑一个不相关的细节。在这里没有那么重要,但你应该试着养成习惯,总是从
cmath
中使用
std::pow
,而不是从
math.h
std::pow
中使用
时,对整数指数进行了一些重要的优化>double
指数,不管发生什么(C中没有函数重载)。