Избегайте быстрого деления (взаимное) - PullRequest
0 голосов
/ 26 февраля 2019

существует ли какой-либо способ написания кода на C с делениями, чтобы дать команду компилятору не использовать быстрое деление (путем обратной математики) в нескольких определенных местах кода, которые требуют точности регулярного деления, даже если взаимная математика разрешена глобально?

В идеале, есть метод, который не зависит от компилятора, а также выдерживает параметры быстрой математики и небезопасной математики, например, gcc.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Вы можете использовать оптимизацию #pragma для отключения -ffast-math в конкретном коде (или обратить его вспять).

Будьте осторожны с использованием библиотечных функций, они, скорее всего, были импортированы с FAST_MATH установлен, поэтому возможно использование быстрых математических версий даже в коде, где локальная быстрая математика отключена.

0 голосов
/ 26 февраля 2019

Вы можете предоставить свою собственную функцию деления в отдельном файле, скажем divide.c

double divide(double a, double b) { return a/b; }

написать соответствующий заголовочный файл divide.h

double divide(double a, double b);

и затем написать в своемкод

#include "divide.h"

int foo() {
    //...
    double x = divide(y,3.0);
}

Поскольку функция разделения здесь неизвестна компилятору, ее нельзя оптимизировать.Итак, применяется алгоритм полного деления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...