我有一个固定长度的整数类,我知道如何实现从我的类型到本机浮点数的转换,反之亦然,但有些特殊情况我不知道该怎么做:
假设有符号类型名称是T
,无符号版本是UT
,类型大小是128-bit
(1) 本机浮点值大于/小于T
或UT
可以表示什么?
(2) T
orUT
的值大于/小于本机浮点可以表示的值?
我应该截断、抛出异常还是将结果设置为零?
谢谢你。
我有一个固定长度的整数类,我知道如何实现从我的类型到本机浮点数的转换,反之亦然,但有些特殊情况我不知道该怎么做:
假设有符号类型名称是T
,无符号版本是UT
,类型大小是128-bit
(1) 本机浮点值大于/小于T
或UT
可以表示什么?
(2) T
orUT
的值大于/小于本机浮点可以表示的值?
我应该截断、抛出异常还是将结果设置为零?
谢谢你。
根据您的问题,我不确定您是否完全理解浮点数。浮点表示既有量级又有精度,但你的问题只是在谈论量级。因此,尽管您的整数可能在浮点可表示的范围内,但它仍然可能无法准确地表示为浮点。你关心准确性的损失吗?
我的选择是抛出一个异常,但也包括预先检查一个数字是否可以用另一种格式表示的方法。换句话说,让您的代码用户选择他们希望如何处理特殊情况。
最好的方法是构造最大和最小值相互兼容的整数-浮点对类
浮点值大于/小于 T 或 UT 可以表示的值?
可能。语言标准要求浮点类型支持至少与 10 37一样大的值,或者相当于 2 122,这接近于最大 128 位整数值(有符号或无符号)。
T 或 UT 的值大于/小于浮点可以表示的值?
可能。
IEEE-754 单精度浮点格式的最大有限值略小于 2 128,而 IEEE-754 双精度格式的最大有限值略小于 2 1024。
这些答案最终取决于您的平台。
我应该截断、抛出异常还是将结果设置为零?
由你决定。