Блог пользователя Absolutely_not_Chaabane

Автор Absolutely_not_Chaabane, 23 месяца назад, По-английски

I have been lately working on a problem and I have noticed that pow() function gives me sometimes a wrong number. $$$\newline$$$ Here's an example : $$$\newline$$$ I wanted to calculate $$$3^{38}$$$ : The calculator indicates that it is equal to 1350851717672992089. However, when I executed the command pow(3,38); I got this number instead : 1350851717672992000. $$$\newline$$$ Can anyone explain to me why is this happening and how to fix it ?

  • Проголосовать: нравится
  • -7
  • Проголосовать: не нравится

»
23 месяца назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

The core algorithm for pow(x, y) computes a logarithm from (a part of) x, multiplies it by y, and computes an exponential function on the product. By using above algorithm floating point induces errors which results in diversion. Therefore it is generally recommended to create power function when in use or save it in your template

»
23 месяца назад, # |
Rev. 2   Проголосовать: нравится +14 Проголосовать: не нравится

Doubles can exactly represent all integers between $$$-2^{52}$$$ and $$$2^{52}$$$. But for example $$$2^{52} + 1$$$ can not be stored in a double. $$$3^{38} > 2^{52}$$$, so it is unlikely $$$3^{38}$$$ has an exact representation.