我正在尝试实现一个快速浮点数= log2(浮点数).我写了一个简单的C程序来比较我的结果和log2,我得到一个小错误,我找不到源代码.
我正在采用识别浮点表示(忽略符号位)的方法2^(exponent) * 1.significand.使用我得到的日志属性log2(float) = exp + log2(1.significand).最终我会截断表查找的有效数字,但是现在我想验证正确的结果.
有关灵感的进一步背景阅读:http://www.icsi.berkeley.edu/pubs/techreports/TR-07-002.pdf
这就是问题所在.这是一个简单的程序,它提取浮点位并将指数加到log2(有效数字).
#include <math.h>
#include <stdint.h>
#include <stdio.h>
int main()
{
typedef union {
int32_t i;
float f;
} poly32_t;
float x = 31415926535.8;
poly32_t one;
one.f = 1.0f;
uint32_t ii;
uint32_t num_iter = 15;
for(ii=0; ii < num_iter; ++ii) {
poly32_t poly_x;
poly32_t poly_x_exponent;
poly32_t poly_x_significand;
// extract the exponent and significand
poly_x.f = x;
poly_x_significand.i = (0x007fffff & poly_x.i); …Run Code Online (Sandbox Code Playgroud)