MnogoBlog
как создать сайт на wordpress, настроить и оптимизировать wordpress
Java Урок 15: Класс Math (основные математические функции)
Для решения задач нередко требуется использование математических функций. В Java такие функции включены в класс Math.
Рассмотрим: Math sqrt, cbrt, округления, тригонометрия, радианы, min, max, модуль числа, PI
Скачать исходники для статьи можно ниже
Извлечение квадратного корня.
Вывод программы:
Корень квадратный 4 = 2.0
Извлечение кубического корня.
Вывод программы:
Кубический корень 8 = 2.0
Округления.
Вывод программы:
Округление 1.4 = 1.0
Округление вверх 1.4 = 2.0
Округление вниз 1.4 = 1.0
Тригинометрические функции.
Вывод программы:
sin 0.5 = 0.479425538604203
cos 0.5 = 0.8775825618903728
tan 0.5 = 0.5463024898437905
asin 0.5 = 0.5235987755982989
acos 0.5 = 1.0471975511965979
atan 0.5 = 0.4636476090008061
Перевод градусов в радианы.
Вывод программы:
1.0 радиан = 57.29577951308232 градусов
180.0 градусов = 3.141592653589793 радиан
Минимальное число.
Вывод программы:
Минимальное число:2
Максимальное число.
Вывод программы:
Максимальное число:5
Абсолютное число.
Число Пи.
Вывод программы:
3.141592653589793
Нахождение гипотенузы.
Вывод программы:
Гипотенуза = 5.0
Похожие записи:
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Квадратный корень в программировании: как вычислить в разных языках
Квадратный корень в программировании вычисляется во многих языках программирования при помощи специальных функций. Но есть языки, в которых нет встроенных функций для извлечения корня, — тогда в них приходится «изворачиваться» собственными методами. Поэтому важно вспомнить, что такое корень числа, из курса математики, чтобы правильно его извлекать «собственными методами».
Квадратный корень из числа А — это некое число В, которое при умножении на сам о себя (возведение во 2-ю степень) дает число А. Все это можно выразить формулой: А=В 2 или А=В*В.
Извлечение корня в Java
При программировании на Java извлечение корня происходит при помощи класса «Math» и метода «static double sqrt(double a)».
Как выглядит извлечение корня в коде:
public class TestSqrt <
public static void main(String[] args) <
double y = Math.sqrt(x);
System.out.println(«Корень квадратный из числа » + x + » будет равен » + y);
Корень квадратный из числа 9 будет равен 3
Извлечение корня в Python
Для вычисления квадратного корня в Python применяется функция «sqrt()», которая расположена в модуле «math».
Как извлечение корня выглядит в коде:
print(«Корень квадратный из числа » + str(number) + » будет равен » + str(sqrt))
Корень квадратный из числа 9 будет равен 3
print («Корень квадратный из числа «+str(num)+» будет равен «+str(sqrt))
Запуск этой программы выдаст такой же результат, как и в первом случае:
Корень квадратный из числа 9 будет равен 3
Напомним, что символы «**» являются оператором возведения в степень.
Как извлечь квадратный корень в Си
Извлечь корень на С/С++ не сложнее, чем в предыдущих языках программирования, так как здесь для вычисления квадратного корня применяется такая же функция sqrt() из модуля «cmath».
Как извлечение корня выглядит в коде:
using namespace std;
double y = 9, result;
Корень квадратный из числа 9 будет равен 3
Заключение
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Изучаем Java
Вы здесь: Главная >> Java-учебник >> Математические функции и константы
Математические функции и константы в языке Java
Класс Math содержит набор математических функций, часто оказывающихся необходимыми при решении разных задач.
Чтобы извлечь квадратный корень из числа, применяют метод sqrt.
double х = 4;
double у = Math.sqrt(х);
System.out.println(у); // Печатает число 2.0.
Между методами println и sqrt есть небольшая разница. Метод println действует на объект System, out, имея второй параметр у — число, подлежащее выводу. (Напомним, что out — это объект, определенный в классе System и представляющий собой стандартное устройство вывода.)
В то же время метод sqrt в классе Math не работает ни с одним объектом. Он имеет единственный параметр х — число, из которого нужно извлечь корень. Такие методы называются статическими.
В языке Java нет оператора возведения в степень: для этого нужно использовать метод pow из класса Math.
Оператор
double у = Math.pow(x,a) ;
присваивает переменной у значение переменной х, возведенное в степень а.
Оба параметра метода pow, а также возвращаемое им значение имеют тип double.
Класс Math содержит обычные тригонометрические функции:
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
Кроме этого, в него включены экспоненциальная и обратная к ней логарифмическая функции (натуральный логарифм):
Math.exp
Math.log
В классе определены также две константы
Math.PI
Math.E,
обозначающие аппроксимации чисел Пи и е.
Для повышения своей производительности функции в классе Math используют программы из встроенного модуля для вычислений с плавающей точкой.
Если точность вычислений важнее скорости их выполнения, используйте класс strictMath.
Он реализует алгоритмы из библиотеки «Freely Distributable Math Library» («Свободно распространяемая библиотека математических функций») fdlibm, гарантирующей идентичность результатов на всех платформах.
Исходные тексты программ, реализующих эти алгоритмы, можно найти на web-странице http://www.netlib.org/fdlibm/index.html. (В библиотеке fdlibm дается несколько определений каждой функции, класс StrictMath следует версии IEEE754, имена функций в которой начинаются с буквы «е».)
Преобразования числовых типов
Часто возникает необходимость преобразовать один числовой тип в другой.
На рис. 3.1 показаны разрешенные преобразования.
Шесть черных стрелок на рис. 3.1 обозначают преобразования, которые выполняются без потери информации. Три серые стрелки означают преобразования, при которых может произойти потеря точности. Например, количество цифр в большом целом числе 123456789 превышает количество цифр, которое может быть представлено типом float.
Число, преобразованное в тип float, имеет правильную величину, но несколько меньшую точность.
int n = 123456789;
float f = n; // Число n равно 1.23456789268.
Рис. 3.1 Разрешенные преобразования числовых типов
Если два значения объединяются бинарным оператором (например n+f, где n — целое число, a f — число с плавающей точкой), то перед выполнением операции оба операнда преобразовываются в числа, имеющие одинаковый тип.
Если хотя бы один из операндов имеет тип double, то второй тоже преобразовывается в число типа double.
В противном случае, если хотя бы один из операндов имеет тип float, то второй тоже преобразовывается в число типа float.
В противном случае, если хотя бы один из операндов имеет тип long, то второй тоже преобразовывается в число типа long.
В противном случае оба операнда преобразовываются в числа типа int.
Приведение числовых типов
В предыдущем разделе мы видели, что при необходимости значения типа int автоматически преобразовываются в значения типа double. С другой стороны, есть несколько очевидных ситуаций, когда число типа double рассматривается как целое. Преобразования чисел в языке Java возможны, однако, разумеется, при этом может происходить потеря информации. Такие преобразования называются приведением типа (cast).
Синтаксически приведение типа задается парой скобок, внутри которых
указывается желательный тип, а затем — имя переменной. Например,
double х = 9.997;
int nx = (int)x;
Теперь в результате приведения значения с плавающей точкой к целому типу переменная nх равна 9, поскольку при этом дробная часть числа отбрасывается.
Если нужно округлить число с плавающей точкой до ближайшего целого числа (что во многих случаях является намного более полезным), используется метод
Math.round.
double x = 9.997;
int nx = (int) Math. round (x);
Теперь переменная nx равна 10. При вызове метода round по-прежнему нужно выполнять приведение поскольку возвращаемое им значение имеет тип long, и присвоить его переменной типа int можно лишь с помощью явного приведения.
При попытке привести число одного типа к другому результат может выйти за пределы допустимого диапазона. В этом случае результат будет усечен.
Например, выражение (byte) 300 равно 44. Поэтому рекомендуется явно проверять заранее, будет ли результат лежать в допустимом диапазоне после приведения типов.
Сергей Владимирцев
29.01.2011
Арифметические и математические операторы Java с примерами
Java содержит набор встроенных математических операторов для выполнения простых арифметических операций над переменными. Они достаточно просты. Также есть класс Java Math, который содержит методы для выполнения более сложных математических вычислений.
Математические операторы Java
Четыре основных математических оператора.
Сложение
Оператор + выполняет сложение двух значений. Это может быть добавление двух констант, константы и переменной или переменной и переменной. Вот несколько примеров:
Оператор + заменит два значения на сумму двух значений во время выполнения. Таким образом, в месте, где записано выражение sum1 + 33, во время выполнения будет заменено суммой значения sum1 и постоянного значения 33.
Конечно, вы можете создавать более длинные цепочки дополнений, и таким образом добавлять более двух чисел. Вот пример добавления трех или более значений вместе:
Обычно используемая математическая операция над переменными – установить переменную равной ее собственному значению плюс другое значение. Вот как это выглядит:
Вторая строка этого примера устанавливает переменную суммы, равную ее собственному значению (перед присвоением нового значения) + 20. Что означает 10 + 20.
Поскольку добавление значения в переменную Java является очень распространенной операцией, есть встроенный оператор для этой конкретной цели. Это оператор + =. Вот пример выше, переписанный с использованием оператора:
Вторая строка в этом примере добавляет 20 к переменной result. Это эквивалентно коду результата = результат + 20;
Вычитание
Оператор “-” выполняет вычитание одного значения из другого. Это может быть вычитание постоянного значения из другого постоянного значения, постоянного значения из переменной или переменной из переменной. Вот несколько примеров:
Оператор “-” заменит два значения разницей между двумя значениями, так же как с оператором +.
Вы можете создавать более длинные цепочки вычитаний. Вот пример вычитания двух значений из другого в дном выражении Java:
Это работает и для переменных.
Помните, минус минус равно плюс, как в обычной математике. Вот пример этого:
Как и в случае с дополнением, Java содержит оператор, специально предназначенный для вычитания значения из переменной и присвоения результата переменной. Вот первое, как это будет выглядеть без этого оператора:
Вот как выглядит та же математическая операция с оператором “-=”:
Умножение
Оператор * выполняет умножение двух значений. Значения могут быть либо двумя постоянными значениями, переменной и постоянным значением, либо двумя переменными. Вот несколько примеров:
Оператор * заменит математическое выражение умножения на произведение двух значений во время выполнения.
Вы можете создавать более длинные цепочки умножения, используя оператор *. Вот пример:
Умножение переменной на значение и присвоение значения обратно переменной является обычной математической операцией в приложениях Java. Поэтому Java содержит явный оператор для этой операции. Оператор “*=”. Вот пример, как будет выглядеть вычисление без оператора:
Вторая строка этого примера умножает значение переменной результата (до присвоения результата этого вычисления) на 20 и присваивает значение обратно переменной результата.
Вот как выглядит та же математическая операция с оператором:
Деление
Оператор “/” выполняет деление одного значения на другое. Это может быть деление одной константы на другую, переменной на константу или одной переменной на другую переменную.
Вы можете объединить несколько значений для деления, но из-за приоритета математического оператора Java (объясненного позже) вы должны обратить внимание на то, как объединяете значения.
После выполнения этого математического выражения переменная деления будет содержать значение 5. Это результат, потому что математическое выражение рассчитывалось сначала путем деления 100 на 10 (= 10), а затем 10 на 2 (= 5). Но что, если вы хотели сначала разделить 10 на 2 (= 5), а затем разделить 100 на 5 (= 20)? Вы должны были бы использовать скобки для достижения этого, например:
Java также содержит оператор быстрого доступа для деления значения переменной на другое значение и присвоения этого значения обратно переменной. Оператор “/=”. Вот как выглядит математическая операция без оператора:
Во второй строке этого примера значение переменной результата (значение, которое оно имело до присвоения результата этого вычисления) делится на 5 и присваивает результат обратно переменной результата.
Вот как выглядит та же математическая операция с оператором “/=”:
Остаток / Модуль
Математическая операция остаток выполняет целочисленное деление одного значения на другое и возвращает остаток этого деления. Оператор для операции остаток / по модулю – это символ % (процент). Вот пример работы модуля:
100, деленное на 9 – это 11 с остатком 1 (11 умножить на 9 – 99). Таким образом, переменной остатка присваивается значение 1.
Java также содержит оператор быстрого доступа для деления переменной на другое значение и назначения оставшейся части этого деления переменной. Оператор “%=”. Вот пример:
Вторая строка этого примера назначит значение 1 переменной результата. 1 является результатом 100% 9.
Приоритет оператора Java Math
Как только вы начинаете комбинировать математические операторы Java в математических выражениях, становится важным контролировать, когда и какие вычисления выполнять, чтобы получить желаемый результат. Математические операторы Java имеют естественный приоритет операторов, который аналогичен приоритетам стандартных математических операторов.
Сначала выполняются умножения и деления. Есть две группы из трех умножений и делений. Каждая группа выполняется слева направо:
После вычисления умножения и деления математическое выражение выглядит так:
Теперь сложения и вычитания выполняются. Таким образом, значение, присвоенное переменной результата, равно 2000 + 600 = 2600.
Вы можете контролировать приоритет оператора и последовательность вычислений в математических выражениях, используя круглые скобки. Выражения в скобках имеют более высокий приоритет, чем любой другой оператор. Внутри скобок применяется нормальный приоритет оператора. Вот математическое выражение из ранее, но с вставленными скобками, которые изменяют вычисления:
Значение 100 все еще умножается на 100 (= 10 000), но теперь оно делится на 5 + 200 (= 205) вместо 5. После этого деления результат умножается на 3, а затем делится на 2. Результат выполнения 72 (округление вычислений влияет на результат).
Java Integer Math
Математические операции, выполняемые с целочисленными типами Java (byte, short, int и long), ведут себя немного иначе, чем обычные математические операции. Поскольку целочисленные типы не могут содержать дроби, в каждом вычислении с одним или несколькими целочисленными типами все дроби в результате обрезаются. Посмотрите на это математическое выражение:
Округление также происходит в подрезультатах больших вычислений.
С плавающей точкой Math
Java содержит два типа данных с плавающей точкой: float и double. Они могут содержать дроби в числах. Если нужны дробные выражения в математических выражениях, вы должны использовать один из этих типов данных. Вот пример математического выражения с плавающей точкой:
Несмотря на то, что переменная результата теперь имеет тип с плавающей запятой (double), конечный результат по-прежнему равен 12 вместо 12,5. Причина в том, что оба значения в математическом выражении (100 и 8) оба являются целыми числами. Таким образом, результат деления одного на другое сначала преобразуется в целое число (12), а затем присваивается переменной результата.
Чтобы избежать округления вычислений, необходимо убедиться, что все типы данных, включенные в математическое выражение, являются типами с плавающей запятой. Например, вы могли бы сначала присвоить значения переменным с плавающей запятой следующим образом:
Теперь переменная результата будет иметь значение 12,5.
В Java есть способ заставить все числа в расчете быть переменными с плавающей точкой. Вы ставите числа с большой буквы F или D. Вот пример:
Обратите внимание на прописные буквы D после каждого числа. Этот верхний регистр D говорит Java, что эти числа должны интерпретироваться как числа с плавающей запятой, и, таким образом, деление должно быть делением с плавающей запятой, которое сохраняет дроби вместо их обрезания.
На самом деле вы также можете сделать число длинным, добавив суффикс числа к верхнему регистру L, но long по-прежнему является целочисленным типом, поэтому он не будет сохранять дробные части в вычислениях.
Точность с плавающей точкой
Типы данных с плавающей точкой не являются точными на 100%. Вы можете столкнуться с ситуациями, когда числа со многими дробями не складываются с ожидаемым числом. Если вычисление с плавающей запятой приводит к числу с большим количеством дробей, чем может обработать число с плавающей запятой или двойное число, дроби могут быть обрезаны. Конечно, заданная точность может быть более чем достаточной для многих типов вычислений, но имейте в виду, что дроби могут фактически быть отсечены.
Вывод выводится при выполнении этого кода с Java 8:
Первый оператор System.out.println() правильно печатает значение 0.0, которое является начальным значением переменной resultDbl3.
Однако второй оператор System.out.println() выводит несколько странный результат. Добавление значения 0,01 к 0 всего 100 раз должно привести к значению 1,0, верно? Но каким-то образом окончательный результат 1.0000000000000007. Как видите, что-то не так во фракциях.
Обычно неточность с плавающей запятой незначительна, но все же важно знать об этом.
Класс Java Math
Класс Java Math предоставляет более сложные математические вычисления, чем те, которые предоставляют базовые математические операторы Java. Класс Math содержит методы для:
Math находится в пакете java.lang, а не в пакете java.math. Таким образом, полное имя класса Math – это java.lang.Math.
Поскольку многие его функции независимы друг от друга, каждый метод будет объяснен в своем собственном разделе ниже.
Основные математические функции
Java.lang.Math содержит набор базовых математических функций для получения абсолютного значения, наибольшего и наименьшего из двух значений, округления значений, случайных значений и т. д.
Math.abs()
Функция Math.abs() возвращает абсолютное положительное значение переданного ей параметра. Если значение параметра является отрицательным, знак “-” удаляется и возвращается положительное значение, соответствующее отрицательному значению без знака. Вот два примера:
Метод Math.abs() представлен в 4 версиях:
Какой из этих методов вызывается, зависит от типа параметра, передаваемого методу Math.abs().
Math.ceil()
Функция округляет значение с плавающей запятой до ближайшего целого числа. Округленное значение возвращается как двойное. Вот пример:
После выполнения этого Java-кода переменная ceil будет содержать значение 8.0.
Math.floor()
Функция Math.floor() округляет значение с плавающей запятой до ближайшего целочисленного значения. Округленное значение возвращается как двойное. Вот пример:
После выполнения ceil будет содержать значение 8.0.
Math.floorDiv()
Метод Math.floorDiv() делит одно целое число (int или long) на другое и округляет результат до ближайшего целочисленного значения. Если результат положительный, эффект такой же, как при использовании оператора “/” (деления), описанного ранее в этом тексте.
Однако, если результат отрицательный, результат не тот же. С помощью оператора “/” дроби просто усекаются. Для положительных чисел это соответствует округлению в меньшую сторону, для отрицательных – в большую. Метод floorDiv() округляет до ближайшего отрицательного целого числа, вместо того, которое будет происходить при усечении дроби.
Это показывает разницу между оператором “/” и Math.floorDiv().
Math.min()
Метод Math.min() возвращает наименьшее из двух значений, переданных ему в качестве параметра:
После выполнения этого кода переменная min будет содержать значение 10.
Math.max()
Метод Math.max() возвращает наибольшее из двух значений, переданных ему в качестве параметра:
После выполнения этого кода переменная max будет содержать значение 20.
Math.round()
Метод Math.round() округляет число с плавающей точкой или удваивается до ближайшего целого числа, используя обычные правила математического округления (вверх или вниз):
После выполнения этих двух операторов Java переменная roundedDown будет содержать значение 23,0, а переменная roundndedUp будет содержать значение 24,0.
Math.random()
Метод Math.random() возвращает случайное число с плавающей запятой в диапазоне от 0 до 1. Конечно, это число не полностью случайное, но результат некоторого вычисления, которое должно сделать его настолько непредсказуемым, насколько это возможно. Вот пример:
Чтобы получить случайное значение между 0 и, например, 100, умножьте значение, возвращаемое Math.random(), на максимальное число (например, 100). Вот пример того, как это может выглядеть:
Если вам нужно целочисленное значение, используйте метод round(), floor() или ceil().
Экспоненциальные и логарифмические функции
Класс Java Math также содержит набор функций, предназначенных для экспоненциальных и логарифмических вычислений.
Math.exp()
Функция Math.exp() возвращает число Эйлера, возведенное в степень значения, указанного в качестве параметра:
Math.log()
Метод Math.log() предоставляет логарифм данного параметра. Основой для логарифма является число Эйлера. Таким образом, Math.log() предоставляет обратную функцию Math.exp(). Вот пример:
Math.log10()
Метод Math.log10 работает подобно методу Math.log(), за исключением того, что использует 10 как основу для вычисления логарифма вместо числа Эйлера:
Math.pow()
Функция Math.pow() принимает два параметра. Метод возвращает значение первого параметра, возведенное в степень второго параметра. Вот пример:
Другими словами, пример Math.pow() вычисляет значения 2, 2 и 28, которые равны 4 и 256.
Math.sqrt()
Метод Math.sqrt() вычисляет квадратный корень заданного ему параметра:
Тригонометрические функции
Класс Java Math содержит набор тригонометрических функций. Эти функции могут вычислять значения, используемые в тригонометрии, такие как синус, косинус, тангенс и т. д.
Mathkpi
Константа Math.PI представляет собой двойное значение, значение которого очень близко к значению PI – математическому определению PI.
Math.sin()
Метод Math.sin() вычисляет значение синуса некоторого значения угла в радианах:
Math.cos()
Метод Math.cos() вычисляет значение косинуса некоторого значения угла в радианах:
Math.tan()
Метод Math.tan() вычисляет значение тангенса некоторого значения угла в радианах:
Math.asin()
Math.acos()
Math.atan()
Math.atan2()
Вот что говорит JavaDoc:
Msgstr “Возвращает угол тета от преобразования прямоугольных координат (x, y) в полярные координаты (r, тета)”.
Если вам нужен этот метод, пожалуйста, прочитайте JavaDoc.