cmath функция, которая добавляет и умножает сразу x * y + z

Есть ли функция в cmath библиотека которая дала 3 номера x, y а также z возвращается x*y+z?

4

Решение

fma который расшифровывается как Fused Multiply Add, был представлен в C99 и C ++ 11:

#include <cassert>
#include <cmath>

int main() {
assert(std::fabs(std::fma(2.0, 3.0, 4.0) - (2.0 * 3.0 + 4.0)) < 0.001);
}

Возможные обоснования:

  • IEEE 754-2008 похоже, добавлена ​​поддержка операции, требующая, чтобы она выполнялась с одним округлением вместо двух.

    Спасибо @ Lưu за то, что подняли это в комментарии.

  • некоторые популярные арки, такие как ARM и x86 иметь один цикл fma инструкций, поэтому теоретически их могут использовать оптимизированные для арки компиляторы / stdlibs.

    Я не знаю, если на практике современные компиляторы уже делают эту оптимизацию.

    Для целых чисел в X86 FMA уже можно было выполнить с помощью инструкции LEA: я думаю, что новшеством является тот факт, что он использует double.

12

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector