Dlaczego kompilator nie optymalizuje zmiennoprzecinkowych * 2 na przyrost wykładniczy?

Często zauważyłem, że gcc konwertuje mnożenia na zmiany w pliku wykonywalnym. Coś podobnego może się zdarzyć podczas mnożeniaint i afloat. Na przykład,2 * f, może po prostu zwiększyć wykładnikf o 1, oszczędzając niektóre cykle. Wykonuj kompilatory, na przykład jeśli ktoś ich o to poprosi (np. Przez-ffast-math), ogólnie, zrób to?

Czy kompilatory są na ogół wystarczająco inteligentne, aby to zrobić, czy też muszę to zrobić samodzielnie za pomocąscalb*() lubldexp()/frexp() rodzina funkcji?

questionAnswers(8)

yourAnswerToTheQuestion