Foam::pow() function not working with integer fraction
the following bug is present in both OF1.5 and OF1.6:
You would expect the following functions to return the same value
Info << pow(turbulence->epsilon(), (1./2.) );
Info << pow(turbulence->epsilon(), (1/2) );
Both compile without error or warning. However, the second line only returns the value 1 in all fields. The first line returns the square root of the epsilon field just as expected.
NB: This bug does not occur with plain integers, so
Info << pow(turbulence->epsilon(), 2. );
Info << pow(turbulence->epsilon(), 2 );
will give you the same (correct) result.
P.S.: As this is such a fundamental function, I wonder why it passed unnoticed for so long ...
The compiler will evaluate 1/2 as integer division. Hence it will be doing a pow(.., 0) which returns 1 as it should. Apart from this you could also use sqrt or sqr.
Oh, of course, that's the reason.
Thanks Mattijs for pointing that out to me!
|All times are GMT -4. The time now is 07:29.|