gpt4 book ai didi

c - 在 C 中识别和分配 +NaN 和 -NaN

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:53 25 4
gpt4 key购买 nike

我必须在 float 中输入 +NaN 或 -NaN 并转换为另一种人工浮点形式,称为 tinyfp(1 个符号位,3 个指数位,4 个小数位位)一个问题,

或者在 tinyfp 中获取输入(每个都呈现 +NaN 或 -NaN)并回答为 +NaN 或 -NaN

问题具体问

+NaN and -NaN in float should be converted to the corresponding +NaN and -NaN in tinyfp, respectively.

+NaN and -NaN in tinyfp should be converted to the corresponding +NaN and -NaN in float, respectively.


第一个问题是,由于我无法将 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.0return -0.0/0.0,但都以 -NaN 结束。 (虽然我可以通过某种方式获得 nan 和 -nan 的输入)


所以问题是,我如何检查输入是 +NaN 还是 -NaN,以及当我想回答为 NaN 时如何不同地分配 +NaN 和 -NaN?

我不允许使用除 stdio.h 以外的任何 header + 我也不能使用 double 格式 - 只允许 float

最佳答案

您对可以使用哪些函数/ header 的限制给人一种强烈的印象,即您应该直接分析和操作 float 的表示。这也假定了特定 float 表示的假设,但大端 IEEE-754 binary32 格式是一个不错的选择。我想您已经在研究这个了。

您可以通过 unsigned char 指针访问浮点值的表示形式:

_Bool my_isnan(float f) {
unsigned char *bytes = (unsigned char *) &f;
// analyze bytes[0], bytes[1], etc. ...
}

您可以通过类似的方式操作float 表示。

我将分析/操作的细节留给你,因为这似乎是练习的关键点,我不会为你做功课。

关于c - 在 C 中识别和分配 +NaN 和 -NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55675084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com