select POWER(2.,64.)vuelve en 18446744073709552000lugar de 18446744073709551616. Parece tener solo 16 dígitos de precisión (redondeando el 17).
Incluso haciendo explícita la precisión select power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0))), aún devuelve el resultado redondeado.
Esto parece una operación bastante básica para que se descarte arbitrariamente a 16 dígitos de precisión como esta. Lo más alto que puede calcular correctamente es solo POWER(2.,56.), fallando POWER(2.,57.). ¿Que esta pasando aqui?
Lo que es realmente terrible es que en 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.;realidad devuelve el valor correcto. Demasiado para la brevedad.
fuente
