关于定点数和浮点数转换的问题
在《Trick of the 3D Game Programming Gurus》这本书上看到以下关于定点数和浮点数转换的代码:
#define FIXP16_MAG 65536
// convert float to fixed point 16.16
#define FLOAT_TO_FIXP16(f) (((float)(f) * (float)FIXP16_MAG+0.5))
// convert fixed point to float
#define FIXP16_TO_FLOAT(fp) ( ((float)fp)/FIXP16_MAG)
书中的32位定点数是由16位整数和16位小数组成的
float类型是由1位符号位、8位阶码和23位尾数组成的
两种表示方式不同的数据是怎么通过简单的移位和加法实现转换的,原理是什么呢?还是书里写错了?