select POWER(2.,64.)返回18446744073709552000而不是18446744073709551616。似乎只有16位精度(四舍五入为17位)。
即使将精度明确化,select power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))它仍然会返回四舍五入的结果。
这样看来,以任意精度将其任意掉落是一个非常基本的操作。它只能正确计算出的最高值POWER(2.,56.),失败了POWER(2.,57.)。这里发生了什么?
真正可怕的是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.;实际上返回了正确的值。非常简洁。