Как подключить математические функции в c
Перейти к содержимому

Как подключить математические функции в c

  • автор:

Стандартные математические функции в языке Си

Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.

Для использования математических функций нужно подключить заголовочный файл 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. перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
  2. выполнение арифметических операций с разными типами аргументов
  3. перед выполнением присваивания

Правила неявного преобразования типов

  • если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
    Порядок типов: 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> .

Таблица 1 — Математические функции в С++

Функция Описание Пример
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? Спасибо.

Pavel Mayorov's user avatar

Rusanov Mikhail's user avatar

Проблема в том, что библиотека 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, возвращаяя лишь целое значние

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *