Для обработки сигналов это было проблемой, как всегда, я все еще принимаю меры предосторожности, добавляя небольшую константу всякий раз, когда может произойти денормация, например:
float coef = 0.9f;
for (int i=0; i<cnt; i++) dst[i] = state = state * 0.9f + 1E-15f;
Очевидно, что это вряд ли идеально, но в прошлом у меня было множество проблем, из-за которых, даже если я пытался установить FTZ, на некоторых компьютерах это явно не работало. В настоящее время я использую Intel IPP так:
ippSetDenormAreZeros(b);
const int success = ippSetFlushToZero(b, NULL) == ippStsNoErr;
Так насколько это надежно? Есть ли способ лучше? Надежный способ? К сожалению, мне нужна поддержка, как и все древние процессоры, скажем, Core2duo, Windows и OSX. Однако я обычно использую SSE2 и новее и CLANG с -mfpmath = sse и -ffast-math.