我在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);
}
Run Code Online (Sandbox Code Playgroud)
然而,当我使用除法的计算值,maxMeshS/minMeshS即100和1/9,即.11111,我得到正确的值b = pow(100, .1111) = 1.66800.为什么会这样?
你的因素是(int)1 / (int)9这是(int)0;几乎所有的东西上升到零功率是一个你可以做这样的事情
double factor = 1/9.0; // make sure the 9 is a floating point
Run Code Online (Sandbox Code Playgroud)
如果我没有记错,你必须改变因子
double factor = 1.0/9;
Run Code Online (Sandbox Code Playgroud)
问题是编译器确实将1/9视为整数除法,结果为0.因此,您计算的幂为0,始终为1.