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?