我在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);
}
然而,当我使用计算后的值来进行除法 maxMeshS/minMeshS
,即100和1/9,即.11111时,我得到了正确的值,如b = pow(100, .1111) = 1.66800
。这是为什么?
cmath
中的std::pow
而不是math.h
中的 C 版本的习惯。std::pow
包含了一些针对整数指数的重要优化,而 C 的pow
则无论如何都使用double
指数(C 中没有函数重载)。 - Benjamin Bannier