С++. Математические функции
Программирование, С/C++
Для всех математических функций необходим заголовок <cmath>. В программах на языке C используется заголовок <math.h>
1 | acos | Функция double acos(double arg) возвращает арккосинус аргумента arg. Значение аргумента функции должно лежать в интервале от -1 до 1, иначе произойдет ошибка. |
2 | asin | Функция double asin(double arg) возвращает арккосинус аргумента arg. Значение аргумента функции должно лежать в интервале от -1 до 1, иначе произойдет ошибка. |
3 | atan | Функция double atan(double arg) возвращает арктангенс аргумента arg. |
4 | atan2 | Функция double atan2(double x, double ![]() |
5 | ceil | Функция double ceil(double num) возвращает ближайшее целое число (представленное как действительное число с плавающей точкой), которое не меньше значения аргумента num. Например, ceil(1.02) вернет 2.0. Такое преобразование называется округлением с избытком. |
6 | cos | Функция double cos(double arg) возвращает косинус аргумента arg. Значение аргумента должно быть выражено в радианах. |
7 | cosh | Функция double cosh(double arg) возвращает гиперболический косинус аргумента arg. |
8 | exp | Функция double exp(double arg) возвращает основание натурального логарифма e, возведенное в степень arg. |
9 | fabs | Функция double fabs(double num) возвращает абсолютное значение (значение по модулю) аргумента num.![]() |
10 | floor | Функция double floor(double num) возвращает наибольшее целое число (представленное как действительное число с плавающей точкой), не превышающее значения аргумента num. Например, floor(1.02) вернет число 1.0. Такое преобразование называется округлением с недостатком. |
11 | fmod | Функция double fmod(double x, double y) возвращает остаток от деления x/y. |
12 | frexp | Функция double frexp(double num, int *exp) раскладывает число num на мантиссу, изменяющуюся в диапазоне от 0.1 до 1, не включая 1, и целый показатель степени, так что |
13 | log | Функция double log(double num) возвращает натуральный логарифм числа num.![]() |
14 | log10 | Функция double log10(double num) возвращает десятичный логарифм числа num. Если аргумент num отрицателен или равен нулю, возникает ошибка. |
15 | pow | Функция double pow(double base, double exp) возвращает число base, возведенное в степени exp. Если основание степени base равно нулю, а показатель степени exp меньше или равен нулю, может произойти ошибка, связанная с выходом аргумента из области определения функции (domain error). Это ошибка возникает также, если аргумент base отрицателен, а аргумент exp не является целым числом. |
16 | sin | Функция double sin(double arg) возвращает синус аргумента arg. Значение аргумента должно быть выражено в радианах.![]() |
17 | sinh | Функция double sinh(double arg) возвращает гиперболический синус аргумента arg. |
18 | sqrt | Функция double sqrt(double num) возвращает квадратный корень аргумента num. Если значение аргумента отрицательно, возникает ошибка, связанная с выходом из области определения функции. |
19 | Функция double tan(double arg) возвращает тангенс аргумента arg. Значение аргумента должно быть выражено в радианах. | |
20 | tanh | Функция double tanh(double arg) возвращает гиперболический тангенс аргумента arg. |
Метки функции. Смотреть запись.
c++ — отличие библиотек и и вопросы точности
вопрос 1:
Подскажите, отличаются ли C++ библиотеки <math.
и h>
<cmath>
чем-то принципиально (кроме новых функций)?
вопрос 2:
Иногда возникают задачи вычисления над близкими значениями, например exp(-(log(x) - a)*(log(x) - a))
, в результате даже long double
перестаёт помогать и приходится вводить какие-то масштабирующие коэффициенты, чтобы повысить точность, что не очень хорошо.
Может дело в том, что функции exp, log программно-написанные, а не из ALU? Как вообще люди решают такие проблемы?
- c++
- математика
- большие-числа
- погрешность
- точность
1
<cmath>
— это по большому счету <math.h>
, только завернутая в пространство имен std
. Или <math.h>
— вытащенные из std
функции <cmath>
…
Проблемы с точностью вычислений связаны с ограниченной точностью представлений чисел с плавающей точкой. Библиотечные функции использовали свои «программно-написанные» функции разве что во времена 80386, когда еще было математический сопроцессор — было удовольствие не на каждой машине. Дело не в этом, а в том, что как ни старайтесь, но законы математики не перепрыгнуть, и действительно надо прибегать к математическим преобразованиям для таких вычислений — вплоть до того, что часто изменение последовательности суммирований существенно меняет результат.
Кстати, некоторые компиляторы при long double
все равно используют обычный double
— например, Visual C++. Проверьте, что там у вас…
3
Для длинной арифметики классика жанра это GMP. Но вообще-то так, чтобы было мало long double это должна быть ОЧЕНЬ специфическая задача. Особенно теперь, когда платформа x86 стала 64-х разрядной.
5
Зарегистрируйтесь или войдите
Регистрация через GoogleРегистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
С++ cmath
КОДИРОВАНИЕ
PRO
СКИДКА 36%
Попробуйте на практике C++ с Programiz PRO
Получите скидку
C++ acos()
Возвращает арккосинус числа
C++ acosh()
возвращает гиперболический косинус числа
C++ asin()
Возвращает арктангенс числа
C++ asinh()
Возвращает аркгиперболический синус числа
C++ atan()
Возвращает арктангенс числа
C++ atan2()
Возвращает обратную координату C++ atanh()возвращает аркгиперболический тангенс числа
C++ cbrt()
Вычисляет кубический корень числа
C++ ceil()
Возвращает максимальное значение числа
C++ cmath abs()
Возвращает абсолютное значение аргумента
C++ copysign()
возвращает число со значением первого и знаком второго
C++ exp()
возвращает экспоненту (e) в степени
C++ exp2()
Возвращает 2 в степени
C++ expm1()
Возвращает e в степени минус 1
C++ fabs()
Возвращает абсолютное значение аргумента
C++ fdim()
Возвращает положительное различие между аргументами
C++ floor()
Возвращает минимальное значение десятичного числа Умножение–накопление
C++ fmax()
возвращает наибольший из двух переданных аргументов
C++ fmin()
возвращает наименьший из двух заданных аргументов
C++ fmod()
Вычисляет остаток от деления 9 с плавающей запятой0005
C++ frexp()
переводит число с плавающей запятой в его двоичную мантиссу
C++ hypot()
Возвращает квадратный корень из суммы квадратов аргументов
C++ ilogb()
возвращает целую часть логарифма |x|
C++ ldexp()
возвращает произведение x и 2, возведенное в степень e
C++ llrint()
Округляет аргумент, используя текущий режим округления0005
C++ log()
Возвращает натуральный логарифм числа
C++ log10()
Возвращает логарифм числа по основанию 10
C++ log1p()
возвращает натуральный логарифм x+1.
C++ log2()
возвращает логарифм числа по основанию 2
C++ logb()
возвращает логарифм |x|
C++ lrint()
Округляет аргумент с использованием текущего режима округления
C++ lround()
Возвращает значение long int, ближайшее к аргументу
C++ modf()
Разбивает число на целую и дробную части
C++ nan()
возвращает простое значение NaN
возвращает значение после x в направлении y
C++ nexttoward()
возвращает следующее значение после x в направлении y0002 Возвращает остаток x/y
C++ remquo()
Компьютерный остаток и сохраняет частное x/y
C++ rint()
Округляет аргумент, используя текущий режим округления
C++ round()
Возвращает ближайшее целое значение в аргумент
C++ scalbln()
Масштабирует x с помощью FLT_RADIX в степень n
C++ scalbn()
Масштабирует x с помощью FLT_RADIX в степень n
C++ sin()
Возвращает синус 9 аргумента
C++ sinh()
возвращает гиперболический синус угла
C++ sqrt()
Вычисляет квадратный корень из числа
C++ tan()
Возвращает тангенс аргумента
C++ 1 возвращает 90 tanh() тангенс угла
C++ trunc()
Усекает кратную часть числа
float_t | самый эффективный тип с плавающей запятой, ширина которого не меньше, чем у float |
дабл_т | самый эффективный тип с плавающей запятой шириной не менее double |
раздел_т | тип структуры, возврат функции std::div |
лдив_т | тип структуры, возврат функции std::ldiv |
lldiv_t | тип структуры, возврат функции std::lldiv |
HUGE_VALF (С++11) (С++11) | указывает значение переполнения для float, double и long double соответственно (макроконстанта) |
БЕСКОНЕЧНОСТЬ (С++ 11) | возвращает положительную бесконечность или значение, которое гарантированно переполняет число с плавающей запятой (макроконстанта) |
НАН (С++ 11) | оценивается как тихий NaN типа float (макроконстанта) |
math_errhandling (C++11) | определяет механизм обработки ошибок, используемый общими математическими функциями (макроконстанта) |
Основные операции | |
абс (целое) (C++11) | вычисляет абсолютное значение целочисленного значения (|x|) (функция) |
абс. Оставить комментарий
|