#8326 closed Bugs (fixed)
returned value of pow() is wrong if argument-variable is reused to accept.
Reported by: | pjtsu | Owned by: | John Maddock |
---|---|---|---|
Milestone: | To Be Determined | Component: | multiprecision |
Version: | Boost 1.53.0 | Severity: | Problem |
Keywords: | Cc: |
Description
If argument-variable is reuse directly, pow(2, 10) returns 1.
Sample code is the following.
#include <iostream> #include <iomanip> #include <boost/math/special_functions/beta.hpp> #include <boost/multiprecision/cpp_dec_float.hpp> int main() { typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50> > MY_FLOAT_TYPE; const double var1 = 2; const double var2 = 10; // OK (equal to 1024) { MY_FLOAT_TYPE a = var1; MY_FLOAT_TYPE b = var2; MY_FLOAT_TYPE c = pow(a, b); std::cout << "result1=" << c << std::endl; a = c; // reusing variable 'a' indirectly. std::cout << "result2=" << a << std::endl; } // NG (not equal to 1024) { MY_FLOAT_TYPE a = var1; MY_FLOAT_TYPE b = var2; a = pow(a, b); // reusing variable 'a' directly. std::cout << "result3=" << a << std::endl; } return 0; }
Output is the following.
result1=1024 result2=1024 result3=1
Incidentally, output of pow(2, 0.5) is the following. Similar problem happened.
result1=1.41421 result2=1.41421 result3=1.18921
I found this problem on Visual Studio 2010 and Linux gcc 4.4.7.
I found similar problem with mpf_float on Linux gcc 4.4.7.
Change History (2)
comment:1 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:2 by , 10 years ago
Note:
See TracTickets
for help on using tickets.
(In [83619]) Fix bug(s) that cause variable reuse in function calls to fail. Add additional test cases. Fixes #8326.