我以爲Erlang處理任意的精度整數。但它看起來像math.pow使用花車默認:Erlang; math.pow,爲什麼不是默認的整數或爲float/int輸入?
使用Linux工具bc
:
88^99
31899548991064687385194313314353745484864573065650712770111884048604\
75359372836550565046276541670202826515718633320519821593616663471686\
151960018780508843851702573924250277584030257178740785152
刪除反斜槓:
3189954899106468738519431331435374548486457306565071277011188404860475359372836550565046276541670202826515718633320519821593616663471686151960018780508843851702573924250277584030257178740785152
在二郎:
float_to_list(math:pow(88,99),[{scientific,192}]).
"3.189954899106468677983468001676918389478607432406058411199358053788184470654582587122118156926366989707830958889227847846886750593566290713618113587727930256898153980172821794148406939795587072e+192"
方旁邊:
bc: 3189954899106468738519431331435374548486457306565071277011188404860475359372836550565046276541670202826515718633320519821593616663471686151960018780508843851702573924250277584030257178740785152
erl: 3189954899106468677983468001676918389478607432406058411199358053788184470654582587122118156926366989707830958889227847846886750593566290713618113587727930256898153980172821794148406939795587072
我寫了一個天真的功能:
integerpow(N, 1) -> N;
integerpow(N, M) -> N*integerpow(N, M-1).
產生正確的答案。
但是它似乎默認行爲,當兩個參數都在整數應產生正確的答案,爲什麼不是?
這個答案基本上說「答案是錯誤的,因爲他們覺得高效而不正確」。 – Tommy
是的,數學是如何實現的。它使用浮點數來計算權力並返回近似結果,就像所有使用浮點數的庫一樣。 Erlang虛擬機本身可以處理大整數,但並不意味着所有的OTP庫都會這樣做。我用更多鏈接添加了對我的回覆的編輯。 – Amiramix