1

C SInt32 整数を [-1, 1] の範囲の float に変換し、元に戻すことができる必要があります。24 ビット整数に関するこの質問の議論を見てきました。

C/C++ - 24 ビット符号付き整数を float に変換する

そして、私は似たようなことを試しました:

 // 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 に答える