Je dois convertir de façon répétée 1024+ flottants consécutifs de 4 octets (plage -1 à 1) en courts-circuits de 2 octets (plage -32768 à 32767) et écrire sur le disque.Façon rapide de convertir le flotteur de la gamme -1 à 1 à court?
Actuellement, je le fais avec une boucle:
short v = 0;
for (unsigned int sample = 0; sample < length; sample++)
{
v = (short)(inbuffer[sample * 2] * 32767.0f);
fwrite(&v, 2, 1, file);
}
Et cela fonctionne, mais le point flottant calc et la boucle est cher. Y a-t-il un moyen de l'optimiser?
Attention: si -1.0 se traduit par -32768 et 0.0 se traduit par 0, alors +1.0 devrait se traduire par +32768, ce qui n'est pas dans la plage 'short'. – mouviciel
Peut-être que l'OP signifie "de -1 jusqu'à 1". Même ainsi, les erreurs d'arrondi à virgule flottante peuvent causer des problèmes. Il serait peut-être préférable d'enregistrer temporairement le calcul dans un int, puis de vérifier sa valeur avant de l'enregistrer dans un float. – David
Bon point, -32767 à 32767 devrait aller. – Morrowless