Ответы пользователя по тегу Программирование
  • Есть ли разница для компьютера: x**3 или x*x*x?

    @Tiriet
    x*x*x скорее всего будет транслирована в три умножения (в зависимости от флагов оптимизации и версии компилятора могут быть разные варианты, как именно по регистрам это все раскидано будет, но не суть). В любом случае, это относительно быстрые инструкции вещественного умножения (1 такт и латентность 3-4).
    pow(x,y) обычно реализована exp(y*ln(x)), и транслирована она будет с использованием инструкций fyl2x (ln2(x)) и f2xm1 (2^^x -1). а вот инструкции логарифма и экспоненты- это оооочень медленные инструкции, у логарифма под 50 тактов на исполнение и латентность больше сотни (под 150), у экспоненты- тактов под десяток и латентность порядка 30 (понятно, что у разных архитектур- числовые значения разные, но порядок величин- такой). А если ваша pow вызывается редко (а она обычно редко вызывается относительно других вычислений)- то работать она будет мало того что долго по собственно тактам исполнения, так еще и со всеми возможными штрафами к производительности. для сравнения- fmul (вещественное умножение) имеет латентность 4 и выполняется за 1 операцию.
    Ответ написан
    Комментировать