C++ math.h中的pow错误
我被C语言中的这个错误所困扰,只是不知道出了什么问题。以下查询构成了我的代码的一个组成部分,用于在连续迭代中以指数方式增加值。以下是我编程的公式: 我已经对代码中的错误进行了注释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): "
#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中没有函数重载)。