我有一个固定长度的整数类,我知道如何实现从我的类型到本机浮点的转换,反之亦然,但有些特殊情况我不知道该怎么做:
假设签名类型名称为T
,未签名版本为UT
,类型大小为128-bit
(1)原生浮点值大于/小于T
或UT
可以代表什么?
(2)T
或UT
的值是否大于/小于本地浮点数所代表的值?
我应该截断,抛出异常还是将结果设置为零?
谢谢。答案 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
这些答案最终取决于您的平台。
我应该截断,抛出异常还是将结果设置为零?
取决于你。