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.;
实际上返回了正确的值。非常简洁。