PostgreSQL POWER函数不同参数类型计算结果差异问询
PostgreSQL中
power函数的参数类型与结果差异 根据PostgreSQL官方文档,power函数存在两个接口:
power ( a numeric, b numeric ) → numeric power ( a double precision, b double precision ) → double precision
测试不同参数类型组合时,出现了结果精度和数值的差异,测试SQL如下:
select ( power( (1 + 0.1689), (32/365.0) )) as power_base, -- 1.01377627781508836023 - numeric ( power( (1 + 0.1689) :: numeric(22,7) , (32/365.0) :: double precision )) as power_num_dp, -- 1.0137762778150883 - double precision ( power( (1 + 0.1689) :: double precision, (32/365.0) :: numeric(22,7) )) as power_dp_num, -- 1.0137762726135617 - double precision ( power( (1 + 0.1689) :: numeric(22,7) , (32/365.0) :: numeric(22,7) )) as power_num_num, -- 1.0137762726135616 - numeric ( power( (1 + 0.1689) :: double precision, (32/365.0) :: double precision )) as power_dp_dp; -- 1.0137762778150883 - double precision
测试结果存在以下现象:
power_base的结果比显式指定numeric类型参数的power_num_num多4位小数,但通过pg_typeof()验证,power_base确实是numeric类型- 混合double precision与numeric类型参数时,
power_dp_num的结果和power_num_num存在细微差异,推测是1.1689在自动转换为numeric类型时产生的舍入误差
该测试在PostgreSQL 13、16版本的PgAdmin和DBeaver工具中结果一致。
内容的提问来源于stack exchange,提问作者Ice2burn
相关产品推荐
相关产品推荐

