我正在尝试将inta 转换为自定义浮点数,其中用户指定为exp和尾数保留的位数,但我不明白转换是如何工作的.我的函数接受一个int值,而int exp表示数字(值*2 ^ exp),即value = 12,exp = 4,返回192.但我不明白我需要做的更改这些过程.我已经看了好几天并玩IEEE转换器网络应用程序,但我只是不明白规范化过程是什么.就像我看到它"移动二进制点并调整指数"但我不知道这意味着什么,有谁可以给我一个例子来解决?我也不明白指数偏差是什么.我唯一的信息是你只是给你的指数添加一个数字,但我不明白为什么.我一直在谷歌搜索一个我能理解的例子,但这对我没有任何意义
我很好奇为什么IEEE称为32位浮点数单精度.它只是一种标准化的手段,还是"单一"实际上指的是单一的'某事'.
它只是一个标准化的水平?如,精度等级1(单),精度等级2(双)等等?我已经搜遍了所有关于浮点数的历史,但没有什么能完全回答我的问题.
在我们看到的math-headers中
extern float fabsf(float);
extern double fabs(double);
extern long double fabsl(long double);
...
extern float fmodf(float, float);
extern double fmod(double, double);
extern long double fmodl(long double, long double);
Run Code Online (Sandbox Code Playgroud)
为什么每种类型都有一个功能?这不是很多重复的代码吗?如果我在哪里写一个lerp函数或一个钳位函数,我需要为每种类型写一个吗?
似乎我们将有重复的代码,其中只有一件事发生了变化 - 类型.
extern float clampf(float value, float min, float max)
{
if(value > max)
return max;
if(value < min)
return min;
return value;
}
extern double clamp(double value, double min, double max)
{
if(value > max)
return max;
if(value < min)
return min;
return value;
}
Run Code Online (Sandbox Code Playgroud)
问题1:这种结构的历史原因是什么?
问题2:我应该遵循相同的模式吗?或者我应该只实现double-kind,因为它是最常见的? …