Here is what I mean trying to do
double x=1.1402
double pow=1/3;
std::pow(x,pow) -1;
result is 0 but I expect 0.4465
the equation is (1 + x) ^3= 1.1402
, find x
.
1/3 is 0. That's integer division.
Try:
double pow = 1.0 / 3.0;
For:
#include <iostream>
#include <cmath>
int main(void)
{
double x = 1.1402;
double pow = 1.0/3.0;
std::cout << std::pow(x, pow) - 1;
}
1/3
is done as integer arithmetic, so you're assigning 0 to pow
. Try pow(x, 1.0/3.0);
Many have stated that 1/3 = 0, but have not explained why this is so.
C and C++ will perform the operation based on the the types of the operands. Since both operands are integers, it performs an integer division creating an integer result. When it is forced to assign that integer result to a double variable, it converts the integer 0 to a double 0.0.
It is not necessary to make both operands double, if either one is double the compiler will convert the other to double as well before performing the operation. 1.0/3 or 1/3.0 will both return the result you expected, as will 1.0/3.0.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With