【发布时间】:2019-09-04 14:28:56
【问题描述】:
对于一个问题,我必须在float 中输入 +NaN 或 -NaN 并转换为另一种名为 tinyfp(1 个符号位、3 个指数位、4 个小数位)的人工浮点形式,
或在 tinyfp 中获取输入(每个都显示 +NaN 或 -NaN)并回答为 +NaN 或 -NaN
问题具体问
float 中的 +NaN 和 -NaN 应分别转换为 tinyfp 中对应的 +NaN 和 -NaN。
和
tinyfp 中的+NaN 和 -NaN 应分别转换为对应的 float 中的 +NaN 和 -NaN。
第一个问题是,由于我无法将 NaN 与任何东西(甚至它本身)进行比较,虽然我可以识别输入值是否为 NaN,但我无法区分 +NaN 和 -NaN。
与第二个问题类似,当我想回答为 +NaN 或 -NaN 时,0.0/0.0 和 -0.0/0.0 都表示为 -NaN,所以我无法回答为 +NaN。
我尝试了if( input == 0.0/0.0) 或(input == -0.0/0.0),但它们不起作用。
我可以尝试if(input != input),但是我无法区分+NaN和-NaN。
对于第二个问题,我尝试了 return 0.0/0.0 和 return -0.0/0.0,但最终都回答为 -NaN。 (虽然我可以通过 nan 和 -nan 获得输入)
所以问题是,我如何检查输入是 +NaN 还是 -NaN,当我想回答为 NaN 时,如何以不同的方式分配 +NaN 和 -NaN?
我不允许使用除 stdio.h + 以外的任何标头,我也不能使用 double 格式 - 只允许使用 float
【问题讨论】:
-
我正在浏览该页面,但找不到他们如何实现它 - 该页面仅说明如何使用他们可用的方法...只是我无法找到如何math.h 是吗?
-
copysign的可能实现在这里:github.com/gcc-mirror/gcc/blob/master/libiberty/copysign.c -
我刚刚尝试过,但尝试 copysign(0.0/0.0, 2) 会得到零,而不是我需要的 +nan。
-
@Kwon 它应该可以工作。请参阅
copysign文档中的示例。问题可能出在您的打印功能中
标签: c floating-point nan