我需要重複將1024個連續的4字節浮點數(範圍-1至1)轉換爲2字節短路(範圍-32768至32767)並寫入磁盤。將範圍-1的浮點數轉換爲1的快速方法?
目前,我這樣做有一個循環:
short v = 0;
for (unsigned int sample = 0; sample < length; sample++)
{
v = (short)(inbuffer[sample * 2] * 32767.0f);
fwrite(&v, 2, 1, file);
}
而這個工作,但浮點計算和循環是昂貴的。有什麼辦法可以優化?
警告:如果-1.0轉換爲-32768且0.0轉換爲0,那麼+1.0應轉換爲+32768,這不在「短」範圍內。 – mouviciel 2010-08-12 09:32:20
也許OP的意思是「從-1直到但不包括1」。即便如此,浮點舍入錯誤也會造成麻煩。也許最好將計算暫時保存在一個'int'中,然後在將其存儲在'float'中之前檢查它的值。 – David 2010-08-12 09:34:47
好點,-32767至32767應該沒問題。 – Morrowless 2010-08-12 09:41:08