select POWER(2.,64.)
restituisce 18446744073709552000
invece di 18446744073709551616
. Sembra avere solo 16 cifre di precisione (arrotondando il 17).
Pur rendendo esplicita la precisione select power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))
, restituisce comunque il risultato arrotondato.
Questa sembra un'operazione piuttosto semplice per sfaldarsi arbitrariamente a 16 cifre di precisione come questa. Il massimo che può calcolare correttamente è solo POWER(2.,56.)
, non riuscendo POWER(2.,57.)
. Cosa sta succedendo qui?
La cosa veramente terribile è che in select 2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.;
realtà restituisce il giusto valore. Questo per quanto riguarda la terseness.