math.h中的错误

aka*_*h_c 3 c c++ math.h pow

我在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.为什么会这样?

McK*_*Kay 9

你的因素是(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)

  • 你需要一个`.`(至少是`9.L`)或者它是一个`long`. (5认同)
  • 你不想要一个`long double`,你想要一个`double`.你想要`9.`(或'9.0`). (2认同)

mic*_*l81 6

如果我没有记错,你必须改变因子

double factor = 1.0/9;
Run Code Online (Sandbox Code Playgroud)

问题是编译器确实将1/9视为整数除法,结果为0.因此,您计算的幂为0,始终为1.