Изучаем 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
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
Заключение
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Вычисление квадратного корня без библиотечных методов
3 ответа 3
Вопрос на самом деле имеет множество решений.
Есть более оригинальные способы, например симуляция вычисления в столбик (вот пример, код приводить не буду )
Способ больше для C, но думаю можно использовать и в Java. Объяснение
Можно использовать логарифмы
Можно использовать численные методы, например метод Ньютона
Существует и много других способов, всё зависит от конкретных требований.
Напишите свою собственную функцию вычисления квадратного корня, используя метод Ньютона (касательных) по формуле
Все зависит от контекста задачи. Про различные методы уже рассказали. Есть еще вариант для случая если примерно известен диапазон входных параметров. Можно просто сделать таблицу с уже готовыми ответами.
Когда делали курсовую по микросхемотехнике для 8 битных систем, то самым простым и быстрым решением была ПЗУ на 256 ячеек с уже зашитыми туда ответами. Но преподователь с таким подходом не согласился. Предложил все же «посчитать».
Всё ещё ищете ответ? Посмотрите другие вопросы с метками алгоритм математика любой-язык или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.12.22.41046
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Дополнительные классы
Математические вычисления и класс Math
abs(double value) : возвращает абсолютное значение для аргумента value
atan(double value) : возвращает арктангенс value
cbrt(double value) : возвращает кубический корень числа value
ceil(double value) : возвращает наименьшее целое число с плавающей точкой, которое не меньше value
cos(double d) : возвращает косинус угла d
cosh(double d) : возвращает гиперболический косинус угла d
exp(double d) : возвращает основание натурального логарифма, возведенное в степень d
floor(double d) : возвращает наибольшее целое число, которое не больше d
floorDiv(int a, int b) : возвращает целочисленный результат деления a на b
log(double a) : возвращает натуральный логарифм числа a
log1p(double d) : возвращает натуральный логарифм числа (d + 1)
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
random() : возвращает случайное число от 0.0 до 1.0
rint(double value) : возвращает число double, которое представляет ближайшее к числу value целое число
round(double d) : возвращает число d, округленное до ближайшего целого числа
scalb(double value, int factor) : возвращает произведение числа value на 2 в степени factor
sin(double value) : возвращает синус угла value
sinh(double value) : возвращает гиперболический синус угла value
sqrt(double value) : возвращает квадратный корень числа value
tan(double value) : возвращает тангенс угла value
tanh(double value) : возвращает гиперболический тангенс угла value