Как проверить на переполнение pow в C? - PullRequest
1 голос
/ 10 января 2020

Я хочу вычислить x^y (степень от x до y), где x и y оба равны int32_t. Результат должен быть таким же. Если есть переполнение (также означающее: вне границы int32_t, я хочу уловить это переполнение - предпочтительно, даже прежде, чем оно произойдет.

Как это возможно?

(I Я знаю, что существуют соответствующие __builtin методы сложения / вычитания / умножения, но я не думаю, что у возведения в степень есть один ...)

1 Ответ

1 голос
/ 10 января 2020

Вы можете использовать собственную реализацию pow для целочисленных значений ( Наиболее эффективный способ реализации целочисленной степенной функции pow (int, int) ; см. Также комментарии), а затем использовать встроенное переполнение проверяет умножение внутри этой функции.

Это зависит от вашего варианта использования, стоит ли это делать. В качестве альтернативы вы можете обнаружить переполнение после факта, проверив результат ошибки, зависящей от реализации.

...