浮点转换为整数的行为

时间:2013-03-25 06:20:27

标签: c++ floating-point type-conversion

我有一个固定长度的整数类,我知道如何实现从我的类型到本机浮点的转换,反之亦然,但有些特殊情况我不知道该怎么做:

假设签名类型名称为T,未签名版本为UT,类型大小为128-bit

(1)原生浮点值大于/小于TUT可以代表什么?

(2)TUT的值是否大于/小于本地浮点数所代表的值?

我应该截断,抛出异常还是将结果设置为零?

谢谢。

3 个答案:

答案 0 :(得分:1)

根据您的问题,我不确定您是否完全理解浮点数。浮点表示具有幅度和精度,但您的问题只是谈论幅度。因此,尽管您的整数可能在浮点表示的范围内,但它仍然可能无法准确表示为浮点。你关心失去准确性吗?

我的选择是抛出异常,但也包括预先检查一个数字是否可以用另一种格式表示的方法。为代码的用户提供他们想要处理特殊情况的选择。换句话说。

答案 1 :(得分:0)

最好的方法是构造整数 - 浮点对类,其max&最小值彼此兼容

答案 2 :(得分:0)

  

浮点值是否大于/小于T或UT可以表示的值?

可能。语言标准要求浮点类型支持至少大到10 37 的值,或者等于2 122 ,它接近最大128位整数值(签名或未签名)。

  

T或UT的值是否大于/小于浮点数所代表的值?

可能是。

IEEE-754单精度浮点格式的最大有限值略小于2 128 ,而IEEE-754双精度格式的最大有限值略小于2 < SUP> 1024

这些答案最终取决于您的平台。

  

我应该截断,抛出异常还是将结果设置为零?

取决于你。