ieee754单精度浮点数的格式如下:
31 30 23 22 0
Sign | exponent | fraction |
如果 0 < exponent < 0xff, 那这个就是规范normalized number.
value = -1**S X 2 **(exponent - 127) X (1.fraction)
考虑简单的情况,计算两个单精度浮点数的基本过程如下:
1. 把两个浮点数的指数对齐,就是把指数变换为其中较大的一个
2. 取mantissa的和
3. 处理结果(rounding, error之类的处理)
c语言例子如下:
#include
float a = 2.4;
float b = 3.5;
// simple ieee 754 single precision float number
// addition arithmetic.
// format:
// S E F
// 1 8 23
float test1(float a, float b)
{
float c = 0;
unsigned int p1 = *((unsigned int *) &a);
unsigned int p2 = *((unsigned int *) &b);
// compute exponent difference
// essentially, we must