3

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

4

2 回答 2

9

你的因素是(int)1 / (int)9几乎(int)0;任何提高到零次方的因素都是你可以做这样的事情

double factor = 1/9.0; // make sure the 9 is a floating point
于 2013-08-26T14:51:54.130 回答
6

如果我没记错的话,您必须将因素更改为

double factor = 1.0/9;

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

于 2013-08-26T14:55:08.187 回答