# C++ pow() function changes behaviour when put inside a function

The problem is that the output of `pow`

is a floating point `double`

. In your custom function you convert that output to `long long`

, which will truncate if the value returned by `pow`

is slightly low instead of slightly high. See Is floating point math broken?. When you call `pow`

directly the value is kept as a `double`

even after the multiplication, and output rounding gives you a more accurate result.

You expect the value returned by `pow(100,2)`

to be 10000, but instead it might be 9999.99999999999 because of the way floating point works. When converted to integer, that becomes 9999; multiplied by 68, you have 679932.

On the other hand, 9999.99999999999 multiplied by 68 becomes 679999.999999999. That's close enough to 680000 that the output function `<<`

will round it for you. You can get a more exact figure if you apply output formatting.