gpt4 book ai didi

c - double 的符号、尾数和指数

转载 作者:行者123 更新时间:2023-11-30 16:55:37 24 4
gpt4 key购买 nike

我从 How to get the sign, mantissa and exponent of a floating point number 找到了以下代码

#include <stdio.h>
typedef union {
float f;
struct {
unsigned int mantisa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} parts;
} double_cast;

int main() {
double_cast d1;
d1.f = 0.15625;
printf("sign = %x\n",d1.parts.sign);
printf("exponent = %x\n",d1.parts.exponent);
printf("mantisa = %x\n",d1.parts.mantisa);
return 0;
}

但是如何将其转换为尾数值为 52、指数为 11、符号为 1 的 double 值?

最佳答案

只需扩展逻辑并像这样定义您的 union ,使用标准 int 64 来实现可移植性:

#include <stdint.h>

typedef union {
double f;
struct {
uint64_t mantisa : 52;
uint64_t exponent : 11;
uint64_t sign : 1;
} parts;
} double_cast;

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

顺便说一句:浮点映射也应该使用标准类型,而不是 int:

typedef union {
float f;
struct {
uint32_t mantisa : 23;
uint32_t exponent : 8;
uint32_t sign : 1;
} parts;
} float_cast;

关于c - double 的符号、尾数和指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249504/

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