gpt4 book ai didi

c - 帮助 - IEEE - 754 - 提取、归一化、NAN 等

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

~请原谅我-

  • 我之前有一篇名为 IEEE - 754 - 查找符号位、指数、分数、归一化等的帖子。

但是,我没有注册我的网卡,我不能编辑它。 (所以帖子对我来说基本上是死的)有人可以删除它吗?我的问题也没有答案。所以我用不同的代码发布这个。

  • 我仍然需要很多帮助...所以请不要将此帖子视为重复...

我找到了符号位、指数位和尾数..

我要测试什么才能找到标准化?如果 exp == 0?

我用什么测试无穷大? exp == 0xff 和 mantiassa == 0?这个标志和它有什么关系吗?

我要测试什么才能找到零? exp == 0 和尾数 == 0?这个标志和它有什么关系吗?

我要测试什么才能找到 NAN?有人可以尽可能简单地解释一下吗,因为我只是一个初学者!我需要再敷面膜吗?

  • 我应该按照什么顺序完成我想要的?

这就是我目前所拥有的。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
int HexNumber;

printf("IEEE- 754 \n");
int a = 0x12345678;
unsigned char *c = (unsigned char*)(&a);

if (*c == 0x78) {
printf("\nlittle-endian\n");
} else {
printf("\nbig-endian\n");
}

printf("\n>");
scanf("%x", &HexNumber);
printf("\n%#x",HexNumber);

bool negative = !!(HexNumber & 0x80000000);
int exponent = (HexNumber & 0x7f800000) >> 23;
int mantissa = (HexNumber & 0x007FFFFF);

printf("\nsignBit %d,", negative);
printf("expbits %d,", exponent);
printf("fractbits %#x,", mantissa);

return 0;
}

...这是我的输出——这就是我想要的:

IEEE - 754 

little-endian

>C0000000

0xc0000000
signBit 1,expbits 128,fractbits 0,

最佳答案

为什么不自己验证呢?

#include <stdio.h>

void extract (float x) {
union {
float value;
struct {
unsigned int frac : 23;
unsigned int exp : 8;
unsigned int sign : 1;
} fields;
} conv;
conv.value = x;
printf ("Value = %.3g,\tSign = %x,\tExp = %x,\tFrac = %x\n", x, conv.fields.sign, conv.fields.exp, conv.fields.frac);
}

int main() {
extract (1.0f); // normal number
extract (1.0f/3.0f); // normal number
extract (0.0f); // 0
extract (-0.0f); // -0
extract (1.0f / 0.0f); // inf
extract (-1.0f / 0.0f); // -inf
extract (0.0f / 0.0f); // nan
extract (1.e-40f); // denormal
extract (-1.e-42f); // denormal
return 0;
}

结果:

Value = 1,  Sign = 0,   Exp = 7f,   Frac = 0
Value = 0.333, Sign = 0, Exp = 7d, Frac = 2aaaab
Value = 0, Sign = 0, Exp = 0, Frac = 0
Value = -0, Sign = 1, Exp = 0, Frac = 0
Value = inf, Sign = 0, Exp = ff, Frac = 0
Value = -inf, Sign = 1, Exp = ff, Frac = 0
Value = nan, Sign = 0, Exp = ff, Frac = 400000
Value = 1e-40, Sign = 0, Exp = 0, Frac = 116c2
Value = -1e-40, Sign = 1, Exp = 0, Frac = 116c2

观察:

  • 如果exp = 0xff,它是 ±inf 或 nan。
    • 如果frac = 0,它是inf(+或-)。
    • 如果frac ≠ 0,是nan(符号位无所谓)。
  • 如果exp = 0,则为零或非正规。
    • 如果frac = 0,则为零(+ 或 -)。
    • 如果frac ≠ 0,非正规(+或-)。

如果您使用的是 C,则已经有 isnan , isinf/isfinite , isnormalsignbit<math.h>对于这些测试。

关于c - 帮助 - IEEE - 754 - 提取、归一化、NAN 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2091169/

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