Я застрял с этой ошибкой в 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
, Почему это происходит?
Ваш фактор (int)1 / (int)9
который (int)0;
Почти все, что возведено в нулевую власть, — это одно
Вы могли бы сделать что-то вроде этого
double factor = 1/9.0; // make sure the 9 is a floating point
если я не ошибаюсь, вы должны изменить коэффициент на
double factor = 1.0/9;
Проблема заключается в том, что компилятор обрабатывает 1/9 как целочисленное деление, что приводит к 0.
Таким образом, вы рассчитываете силу нуля, которая всегда равна 1.