Стандартные математические функции в языке Си
Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.
Для использования математических функций нужно подключить заголовочный файл math.h . В ней определено много различных функций, но мы пока рассмотрим следующие:
Некоторые математические функции
fabs(x) модуль числа x
sqrt(x) квадратный корень из числа x
sin(x) синус числа x (х в радианах)
cos(x) косинус числа x (х в радианах)
pow(x, y) вычисление x y
exp(x) вычисление e x
log(x) натуральный логарифм числа x
log10(x) десятичный логарифм числа x
- Все функции возвращают значение типа double .
- Параметры функций – вещественные числа( double ), но можно передавать и целые числа. При этом произойдёт неявное преобразование типа . Компилятор из целого числа, например 3, сделает вещественное 3.0.
Примеры.
Даны длины катетов прямоугольного треугольника. Вычислить длину гипотенузы. Простая задачка на знание теоремы Пифагора.
Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.
В этой программе есть о чём поговорить. Тригонометрические функции, которые определены в math.h работают с радианной мерой угла. Людям же привычнее работать с градусами. Поэтому в данной программе мы предварительно перевели значение из градусов в радианы. Если этого не сделать, результат получится неправильным. Проверьте это самостоятельно.
Неявное преобразование типов
При явном преобразовании типа мы в скобках перед значением указывали тип, к которому нужно привести данное значение. В неявном преобразовании этого делать не нужно. Компилятор автоматически подберёт необходимый тип.
Неявное преобразование типов осуществляется в следующих случаях:
- перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
- выполнение арифметических операций с разными типами аргументов
- перед выполнением присваивания
Правила неявного преобразования типов
- если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
Порядок типов: int < float < double - при присваивании. Значение справа от оператора присваивания приводится к типу переменной слева от оператора присваивания. При этом, если больший тип присваивается меньшему, то может произойти потеря точности.
int+float будет автоматически преобразовано к float+float
float/int будет автоматически преобразовано к float/float
double*float будет преобразовано к double*double
int = double double будет преобразовано к int с потерей дробной части
float = int int будет преобразовано к float
Сохрани в закладки или поддержи проект.
Практика
Решите предложенные задачи:
Для удобства работы сразу переходите в полноэкранный режим
Математические функции в С++
В С++ определены в заголовочном файле <cmath> функции выполняющие некоторые часто используемые математические задачи. Например, нахождение корня, возведение в степень, sin() , cos() и многие другие. В таблице 1 показаны основные математические функций, прототипы которых содержатся в заголовочном файле <cmath> .
Функция | Описание | Пример |
---|---|---|
abs( a ) | модуль или абсолютное значение от а | abs(-3.0)= 3.0 abs(5.0)= 5.0 |
sqrt(a) | корень квадратный из а, причём а не отрицательно | sqrt(9.0)=3.0 |
pow(a, b) | возведение а в степень b | pow(2,3)=8 |
ceil( a ) | округление а до наименьшего целого, но не меньше чем а | ceil(2.3)=3.0 ceil(-2.3)=-2.0 |
floor(a) | округление а до наибольшего целого, но не больше чем а | floor(12.4)=12 floor(-2.9)=-3 |
fmod(a, b) | вычисление остатка от a/b | fmod(4.4, 7.5) = 4.4 fmod( 7.5, 4.4) = 3.1 |
exp(a) | вычисление экспоненты е а | exp(0)=1 |
sin(a) | a задаётся в радианах | |
cos(a) | a задаётся в радианах | |
log(a) | натуральный логарифм a(основанием является экспонента) | log(1.0)=0.0 |
log10(a) | десятичный логарифм а | Log10(10)=1 |
asin(a) | арксинус a, где -1.0 < а < 1.0 | asin(1)=1.5708 |
Необходимо запомнить то, что операнды данных функций всегда должны быть вещественными, то есть a и b числа с плавающей точкой. Это связано с тем, что существует несколько экземпляров перегруженных функций, соответствующих списку аргументов. Тему перегруженные функции рассмотрим немного позже, а пока надо запомнить, что a и b числа с плавающей точкой. Разработаем программу, которая будет использовать математические функции.
Итак, чтобы воспользоваться данными функциями необходимо подключить заголовочный файл <cmath> как в строке 5, после чего можно использовать любую из функций, прототипы которых находятся в этом заголовочном файле. Результат работы программы (см. Рисунок 1).
Рисунок 1 — Математические функции в С++
Чтобы увидеть полный перечень функций в данном заголовочном файле, просто откройте его. Сделать это можно либо через поиск, либо через обозреватель решений, если программируете в MVS (см. Рисунок 2). В «Обозревателе решений» открываем вложенный каталог «Внешние зависимости«, в нём находим файл cmath . Открыв его, можно увидеть полный список математических функций.
Рисунок 2 — Математические функции в С++
Открыть заголовочный файл можно, нажав правой кнопкой мыши по его имени, как показано на рисунке 3. В появившемся окне выбираем пункт Открыть документ <cmath> .
Math.NET как правильно подключить к проекту Visual Studio 2013?
Возникли трудности с использованием библиотеки Math.NET Numerics.
Подскажите пожалуйста, как правильно ее подключить к проекту?
Изложу по порядку:
Я создал проект Class Library (dll‘ку), прописал методы класса и интерфейсы, все хорошо работает.
Теперь для написания математических расчетов подключаю Math.Net к проекту через Solution Explorer -> References -> Manage NuGet Packages.
Устанавливаю, после чего показывает что либа успешно установлена.
Указываю в проекте
Меняю тип билда на Release , билдю проект..
В итоге компилятор выдает ошибку:
Error 2 Assembly generation failed — Referenced assembly ‘MathNet.Numerics’ does not have a strong name
В чем ошибка, как ее исправить или как правильно подключить Math.NET Numerics? Спасибо.
Проблема в том, что библиотека Math.NET Numerics никем не подписана — а у вашей библиотеки подпись есть.
Проще всего убрать подпись у вашей библиотеки. Если же подпись вам нужна — вам придется собирать Math.NET Numerics из исходников.
Если вы используете гит — то лучше всего форкнуть исходники Math.NET Numerics, добавив туда использование подписи. После чего этот форк можно прицепить к основному проекту как субмодуль.
Если вы не используете гит — то проще всего будет скачать исходники, добавить туда подпись, побилдить их — после чего утянуть к себе итоговую dll.
Как подключить математические функции в c
Для выполнения различных математических операций в библиотеке классов .NET предназначен класс Math . Он является статическим, поэтому все его методы также являются статическими.
Рассмотрим основные методы класса Math:
Abs(double value) : возвращает абсолютное значение для аргумента value
Acos(double value) : возвращает арккосинус value. Параметр value должен иметь значение от -1 до 1
Asin(double value) : возвращает арксинус value. Параметр value должен иметь значение от -1 до 1
Atan(double value) : возвращает арктангенс value
BigMul(int x, int y) : возвращает произведение x * y в виде объекта long
Ceiling(double value) : возвращает наименьшее целое число с плавающей точкой, которое не меньше value
Cos(double d) : возвращает косинус угла d
Cosh(double d) : возвращает гиперболический косинус угла d
DivRem(int a, int b, out int result) : возвращает результат от деления a/b, а остаток помещается в параметр result
Exp(double d) : возвращает основание натурального логарифма, возведенное в степень d
Floor(decimal d) : возвращает наибольшее целое число, которое не больше d
IEEERemainder(double a, double b) : возвращает остаток от деления a на b
Log(double d) : возвращает натуральный логарифм числа d
Log(double a, double newBase) : возвращает логарифм числа a по основанию newBase
Log10(double d) : возвращает десятичный логарифм числа d
Max(double a, double b) : возвращает максимальное число из a и b
Min(double a, double b) : возвращает минимальное число из a и b
Pow(double a, double b) : возвращает число a, возведенное в степень b
Round(double d) : возвращает число d, округленное до ближайшего целого числа
Round(double a, int b) : возвращает число a, округленное до определенного количества знаков после запятой, представленного параметром b
Sign(double value) : возвращает число 1, если число value положительное, и -1, если значение value отрицательное. Если value равно 0, то возвращает 0
Sin(double value) : возвращает синус угла value
Sinh(double value) : возвращает гиперболический синус угла value
Sqrt(double value) : возвращает квадратный корень числа value
Tan(double value) : возвращает тангенс угла value
Tanh(double value) : возвращает гиперболический тангенс угла value
Truncate(double value) : отбрасывает дробную часть числа value, возвращаяя лишь целое значние