任何人都可以解释这个功能的作用吗
static inline void round_to_zero(volatile float *f)
{
*f += 1e-18;
*f -= 1e-18;
}
Run Code Online (Sandbox Code Playgroud)
我的意思是除了添加1e-18并再次减去它,我明白了.但我不明白它会对传递给它的浮点数产生什么影响.我试图理解它的原因是我在一些使用此函数的代码中使用双精度(我已经从浮点数转换).它的音频代码和上面的函数来自这个库:
https://github.com/swh/lv2/blob/master/include/ladspa-util.h
我想知道它是否可以在双精度上工作,或者需要为双精度的额外精度进行修改.我怀疑这会击败最后几位数据,如果它们在那里就从浮动中删除它们,虽然我不太清楚如何.但我想如果这就是它的作用,我需要改变指数以适应双倍.
TIA,皮特
以下代码演示了该函数的作用。
int main( void )
{
float a;
a = -1.0;
a /= 1e100;
printf( "%f\n", a );
round_to_zero( &a );
printf( "%f\n", a );
}
Run Code Online (Sandbox Code Playgroud)
您需要知道的是 IEEE-754 浮点数有两个可能的值0。有一个positive 0和一个negative 0。该round_to_zero函数将负 0 转换为正 0。
该值1e-18大约1 lsb适用于双精度数1.0。因此,我认为使用该函数不需要进行任何修改double(当然,除了更改参数类型之外)。