Firebird是否支持FLOAT类型的Infinity值?如何获取该值?
Firebird获取FLOAT类型无穷大值的相关说明
官方规则边界
- Firebird官方文档暂未提供直接获取FLOAT类型无穷大值的原生支持路径
- 现有类型转换规则存在明确校验差异:DOUBLE PRECISION承载的±Infinity值强制转换为FLOAT类型时,会触发数值范围溢出报错;但同精度域下生成的NaN值可以正常转换为FLOAT类型
非官方实现方法
可绕开跨精度转换的校验拦截,在FLOAT类型的精度计算域内触发溢出直接生成目标值:
- 生成FLOAT类型+Infinity:取IEEE单精度FLOAT的最大可表示有限值
3.4028235E38,在FLOAT计算域内乘以10触发溢出,对应语句:select cast(3.4028235E38 as float) * 10 as float_pos_inf from RDB$DATABASE - 生成FLOAT类型-Infinity:在上述计算逻辑基础上将系数替换为-10,对应语句:
select cast(3.4028235E38 as float) * (-10) as float_neg_inf from RDB$DATABASE
上述计算全程在FLOAT精度范围内完成,不会触发DOUBLE转FLOAT时的无穷值拦截校验,最终返回的结果为标准FLOAT类型的无穷大值。
内容的提问来源于stack exchange,提问作者Lukas Eder
相关产品推荐
相关产品推荐

