我读到过它们以尾数和指数的形式存储
我读过这篇文章,但我一个都没懂。
我读到过它们以尾数和指数的形式存储
我读过这篇文章,但我一个都没懂。
除了常规浮点数值外,还有一些特殊值:
最后,以下是一些具体示例(所有值均为十六进制):
typedef struct {
unsigned int mantissa_low:32;
unsigned int mantissa_high:20;
unsigned int exponent:11;
unsigned int sign:1;
} tDoubleStruct;
double a = 1.2;
tDoubleStruct* b = reinterpret_cast<tDoubleStruct*>(&a);
以下是一个示例,展示了如果编译器使用IEEE 754双精度(在小端系统上,默认为C double)时内存的设置方式(例如Intel x86)。
这是以C二进制形式表示的,最好阅读维基百科关于双精度的介绍以理解它。
尾数表示数字的最高有效位。
指数表示需要对尾数进行多少次移位才能得到实际值。
编码指定尾数符号和指数符号的表示方式(基本上是向左还是向右移位)。
您所提到的文档指定了IEEE编码,这是最广泛使用的编码方式。
它是实现定义的,虽然IEEE-754迄今为止是最常见的。
要确保使用IEEE-754:
#ifdef __STDC_IEC_559__
std::numeric_limits<float>::is_iec559
常量我已经写了一些关于IEEE-754的指南,包括: