1

我需要能够将 C SInt32 整数转换为 [-1, 1] 范围内的浮点数并返回。我已经看到关于 24 位整数的这个问题的讨论:

C/C++ - 将 24 位有符号整数转换为浮点数

我试过类似的东西:

 // Convert int - float
 SInt32 integer = 1;
 Float32 factor = 1;
 Float32 f = integer / (0x7FFFFFF + 0.5);

 // Perform some processing on the float
 Process(f);

 // Scale the float
 f = f * factor;

 // Convert float - int
 integer = f * (0x7FFFFFF + 0.5);

但是,这不起作用。我知道它不起作用,因为我正在做的工作涉及音频编程并且转换会导致嘶嘶声。

我很确定这是一个转换问题,因为当我通过将因子设置为 0.0001 使浮动变小时,噼啪声消失了。也许反向转换使 int 超出了它的限制并导致它被截断。

任何建议将不胜感激。

4

2 回答 2

4

阅读IEEE 浮点格式IEEE 32 位浮点数仅支持 24 位有效位,因此如果您转换 32 位整数,您将丢失低 8 位。

于 2012-10-29T17:09:29.907 回答
2
const float recip = 1.0 / (32768.0*65536.0);
// hope that compiler will calculate this in advance
// From the expression an semi-advanced programmer can also immediately spot
// where the value comes from
float value = int_value * recip;
int value2 = value * (32768.0*65536.0);

这个过程是不可逆的:一个人可能会损失多达 7 位的准确性。

于 2012-10-29T17:12:01.483 回答