Квадратный корень в программировании: как вычислить в разных языках
Квадратный корень в программировании вычисляется во многих языках программирования при помощи специальных функций. Но есть языки, в которых нет встроенных функций для извлечения корня, — тогда в них приходится «изворачиваться» собственными методами. Поэтому важно вспомнить, что такое корень числа, из курса математики, чтобы правильно его извлекать «собственными методами».
Квадратный корень из числа А — это некое число В, которое при умножении на сам о себя (возведение во 2-ю степень) дает число А. Все это можно выразить формулой: А=В 2 или А=В*В.
Извлечением корня из числа А называют операцию по поиску числа В. Мы покажем , как это делается в нескольких языках программирования.
Извлечение корня в Java
При программировании на Java извлечение корня происходит при помощи класса «Math» и метода «static double sqrt(double a)».
Как выглядит извлечение корня в коде:
public class TestSqrt
public static void main(String[] args)
int x = 9;
double y = Math.sqrt(x);
System.out.println(«Корень квадратный из числа » + x + » будет равен » + y);
>
>
Запустив эту программу , мы получим следующий результат:
Корень квадратный из числа 9 будет равен 3
Извлечение корня в Python
Для вычисления квадратного корня в Python применяется функция «sqrt()», которая расположена в модуле «math».
Как извлечение корня выглядит в коде:
import math
num b er = 9
sqrt = math.sqrt(number)
print(«Корень квадратный из числа » + str(number) + » будет равен » + str(sqrt))
Запустив эту программу , мы получим следующий результат:
Корень квадратный из числа 9 будет равен 3
Есть еще один изящный способ извлеч ения кор ня на языке программирования Python — применить возведение в степень «0 , 5». Кстати, такой способ применим и в других языках программирования, где отсутствует функция для вычисления квадратного корня. Как это выглядит в коде:
number = 9
sqrt = number ** (0.5)
print («Корень квадратный из числа «+str(num)+» будет равен «+str(sqrt))
Запуск этой программы выдаст такой же результат, как и в первом случае:
Корень квадратный из числа 9 будет равен 3
Напомним, что символы «**» являются оператором возведения в степень.
Как извлечь квадратный корень в Си
Извлечь корень на С/С++ не сложнее, чем в предыдущих языках программирования, так как здесь для вычисления квадратного корня применяется такая же функция sqrt() из модуля «cmath».
Как извлечение корня выглядит в коде:
#include
#include
using namespace std;
int main()
double y = 9, result;
result = sqrt(y);
cout < < “Корень квадратный из числа “ < < y < < “будет равен “ < < result < < endl;
return 0;
>
Запустив эту программу , мы получим следующий результат:
Корень квадратный из числа 9 будет равен 3
Заключение
Квадра т ный корень в программировании не сложно вычислить, если язык программирования содержит стандартные функции и модули для того, чтобы осуществлять подобные вычисления. В других же случая х п ридется искать дополнительные методы, например , такой как возведение числа в степень 0 , 5.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
13.17. Java – Метод Math.sqrt()
Метод Math.sqrt() – возвращает квадратный корень из аргумента.
Синтаксис
double sqrt(double d)
Параметры
Подробная информация о параметрах:
- base – любой примитивный тип данных.
- exponent – любой примитивный тип данных.
Возвращаемое значение:
- В Java Math.sqrt() возвращает квадратный корень из аргумента.
Пример
public class Test < public static void main(String args[])< double x1 = 16; double x2 = 2.25; double x3 = 0.25; double x4 = 88.675; System.out.printf("sqrt(%.3f) = %.3f%n", x1, Math.sqrt(x1)); System.out.printf("sqrt(%.3f) = %.3f%n", x2, Math.sqrt(x2)); System.out.printf("sqrt(%.3f) = %.3f%n", x3, Math.sqrt(x3)); System.out.printf("sqrt(%.3f) = %.3f%n", x4, Math.sqrt(x4)); >>
Получим следующий результат:
sqrt(16,000) = 4,000 sqrt(2,250) = 1,500 sqrt(0,250) = 0,500 sqrt(88,675) = 9,417
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
Квадратный корень в Java
Реализуя метод проверки числа на простоту, по следам нахождения простых чисел:
package ru.yamakarov.prime; public class Sqrt boolean isPrime(int number) if (number == 1) return true; > double sqrt = Math.sqrt(number); for (int i = 2; i sqrt; i++) if (number % i == 0) return false; > > return true; > >
Я стал разбираться, как работает Math.sqrt . Реализация – простая, java.lang.Math делегирует работу java.lang.StrictMath :
public static double sqrt(double a) return StrictMath.sqrt(a); // default impl. delegates to StrictMath // Note that hardware sqrt instructions // frequently can be directly used by JITs // and should be much faster than doing // Math.sqrt in software. >
Комментарий про хардварные инструкции очень интересен и надо смотреть код jdk, чтобы разобраться, как они подставляются и на каком этапе.
В идее доступен лишь вызов нативного метода в java.lang.StrictMath :
public static native double sqrt(double a);
Как следует из javadoc, реализация берется из библиотеки fdlibm. И там реализация устрашающая e_sqrt.c.
Я решил накидать свою для интереса. И методом половинного деления для натуральных чисел написал такую программульку:
package ru.yamakarov.sqrt; /** * Square root * */ public class SquareRoot public static void main( String[] args ) int n = 9; double l = 0; double h = n; double r = 0; while (h - l > 0.00000000000000001) System.out.println(h + " " + l + " " + r); r = (h + l) / 2; double r2 = r * r; if ( r2 == n) break; > if ( r2 > n) h = r; > else l = r; > > System.out.println(r); System.out.println(r * r); System.out.println(Math.sqrt(n)); > >
Она проще и короче, но боюсь работает адски долго.
Записки Java программиста
- Записки Java программиста
- yakov_makarov@mail.ru
Класс
математических вычислений Math
Порой необходимо сделать более серьезные вычисления, чем сложить или помножить два числа. На практике постоянно нужно или посчитать квадратный корень, или возвести в степень, или взять модуль. Также часто нужно генерировать случайные числа, чтобы программа каждый раз вела себя по-новому, задавала уникальные вопросы, располагала персонажей на экране в других положениях и так далее. Для всего этого в Java есть встроенный класс Math.
Пусть, к примеру, есть объявление, что площадь квадратного участка земли составляет 9 соток, и вы хотите посчитать длину стороны такого участка. Сотка — это 100 квадратных метров, а значит 9 соток — это 900 кв. метров. Длина стороны будет квадратным корнем из площади квадрата. Для расчета стороны нам поможет класс Math, и вот как он работает:
// объявить дробное x и приравнять к результату вычисления double x = Math.sqrt (900); // Math.sqrt - функция sqrt класса Math. // Она вычисляет квадратный корень из своего параметра. // В данном случае корень из 900 будет 30
Данный код запускает функцию sqrt, сокращенно от square root – квадратный корень. Скобки обозначают «запустить функцию с параметром», он сейчас равен 900. То есть мы вычисляем квадратный корень из 900, он равен 30, поскольку 30*30=900. Полученную десятку мы записываем в переменную икс. Если не записать результат вычисления в переменную или ещё как-то его не использовать, то он сразу стирается как ненужный.
В этом примере мы запускаем функцию, которая возвращает значение. Так устроены все вычислительные функции – они берут параметры, делают вычисления и выдают результат там же, где были вызваны. Так и здесь вместо
double x = Math.sqrt (100);
фактически выполнится
double x = 10; //в место вызова Math.sqrt(100) подставится результат - 10
потому что sqrt вернет число 10, и десятка подставится на место вызова sqrt. Мы вскоре сами будем писать функции, которые возвращают значение. Пока что воспользуемся библиотечными.
Класс Math содержит много функций для самых разных вычислений. Доступ к ним идет через слово Math и точку вот так:
Math.название_функции (параметр);
Посмотрим новый пример с комментариями:
package javaapplication1; public class JavaApplication1 < public static void main(String[] args) < //вызовем функцию println System.out.println ("Пользуемся Math"); // Объявим переменную x, равную корень из 100 double x = Math.sqrt (100); // Теперь объявим y, равную корню из x, double y = Math.sqrt (x); // Выведем на экран значение y System.out.println (y); // Попробуем посчитать корень из отрицательного числа double z = -10; /* Подставим вызов sqrt прямо в println – да, так можно. Мы увидим NaN – not a number, т.е. не число, потому что корня из отрицательного числа не существует. */ System.out.println (Math.sqrt (z)); /* Попробуем ещё функции. Модуль или abs от absolute – абсолютный – эта операция убирает у числа знак минус. Переменная z была -10, а станет просто 10 */ z = Math.abs (z); /* Применим теперь возведение в степень pow – от слова power – степень. Pow принимает два параметра, назовем их a и b, они указываются в скобках через запятую. Pow вернет a в степени b. Например пусть a = 2, b = 3, то есть возведем 2 в степень 3 и получим 8. */ double a = 2; double a_cube = Math.pow (a, 3); System.out.println (a_cube); // Округлим дробное число до наименьшего целого – это ceil double s = Math.ceil (2.7); // Будет 2 System.out.println (s); // Округлим число до наибольшего целого – это floor s = Math.floor (2.7); // Будет 3 System.out.println (s); /* Функция signum возвращает 1, если число положительное и -1, если отрицательное. Так мы можем узнать знак числа */ double res = Math.signum (-10); // Будет -1 System.out.println (res); /* также есть все функции тригонометрии – синус sin, косинус cos и так далее. Число pi обозначается Math.PI. Например, sin (pi/3) будет так: */ res = Math.sin (Math.PI / 3); /* Полный список функций доступен, например, на сайте официальной документации и легко находится в гугл запросом «класс Math Java». В качестве примера гугл выдал ссылку - http://java-help.ru/java-lang-math/ - там полный список функций этого класса с примерами и описанием. А вот ссылка на официальную документацию: https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html Документация просто содержит описание всех функций всех стандартных классов. Она пока существует только на английском, но написана простым техническим языком. Учитесь гуглить, читать форумы, документацию, справочники, стандарт языка. Огромное количество начальных вопросов подробно разобрано – ищите и найдёте! Это очень важное умение для программиста, не пренебрегайте им! На нашем онлайн курсе progtoday.ru преподаватели дают принципы программирования и подталкивают участников к максимальной самостоятельности. */ >/* По достижении закрывающей фигурной скобки переменные уничтожаются. Поскольку это был main, вся программа завершается. */ >
Теперь давайте попробуем сделать более сложные выражения. Математические функции получают на вход число и в результате дают другое число. Поэтому можно результат одной функции сразу передавать другой. Посмотрим на примере:
// вычислим квадратный корень из 81, вычислим 2 в степени 3 // вычтем одно из другого и дадим на вход функции abs double y = Math.abs ( Math.sqrt (81) - Math.pow (2,3) ); // теперь y будет положительной независимо от знака разности // это бывает удобно, когда вы не уверены в знаке результата, а вам нужен положительный. // снова дадим результат вычисления одной функции на вход другой: System.out.println ( Math.sqrt (81) ); // распечатать квадратный корень из 81 // Такие комбинации можно делать сколько угодно раз - // результат предыдущей функции подается на вход следующей и так далее. // к примеру можно вычислить квадратный корень из двух в кубе: double z = Math.sqrt ( Math.pow ( 2,3) );
Генерируем случайные числа
Очень часто бывает нужно получить случайные числа. Например, в следующих темах мы с вами сделаем игру в лотерею, и нужно будет генерировать случайное счастливое число, а пользователь будет его угадывать — каждый раз разное. На помощь приходит простая функция Math.random, которая при запуске возвращает очередное случайное число в диапазоне от 0 до 1. Хотите диапазон от 0 до 100? Умножьте полученное число на 100. Подробнее посмотрим в коде:
// сгенерируем и напечатаем случайное число от 0 до 1 double x = Math.random(); System.out.println (x); // одно случайное число x = Math.random(); System.out.println (x); // уже совсем другое и заранее его предсказать невозможно // теперь от 0 до 100 x = Math.random() * 100; // теперь от 10 до 100 x = 10 + Math.random() * 100; //и в общем виде double a = 10, b = 100; x = a + Math.random() * b;
Самое главное мы уже освоили. Теперь время решать задачи. Ответьте на несколько вопросов, чтобы лучше усвоился новый материал. Имейте в виду, некоторые ответы были освещены в темах раньше или не были освещены вообще, так что если приходится думать слишком много, то просто открывайте ответ по плюсику и читайте. Другое дело задачи из нашего задачника — только для некоторых типов задач дано решение. остальное вы должны написать сами.
Вопрос 1. Перечислите, какие функции класса Math вы знаете. Что они делают?
В этой теме мы прошли — sqrt, pow, abs, ceil, floor, sin, cos и random. На самом деле их несколько больше, см. документацию java по классу Math — https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html В том числе отметим арккосинус — acos, арксинус — asin, минимум из двух числе — min, максимум — max. Очень рекомендуем в какой-либо тетрадке начать выписывать ключевые слова, принципы и так далее — когда вы пишите, ваш мозг включается на 100%, а потом будет легче вспомнить по записям.
Вопрос 2. Что значит — «функция возвращает значение»?
Когда мы пишем название функции и указываем затем круглые скобки, они запускается. Есть функции, не возвращающие никаких значений — например, распечатка. А есть функции, возвращающие значения, например — вычисление квадратного корня. Фраза «функция возвращает значение» означает, что при вызове такой функции в коде прямо вместо ее имени будет подставлено число (или набор чисел, как мы узнаем позже), которое она рассчитала.
Задача 1. Ниже дан код. Как вы думаете, почему компилятор выдает на нем ошибку?
package javaapplication1; public class JavaApplication1 < public static void main(String[] args) < int x = Math.sqrt (100); System.out.println (x); >>
Большинство математических функций возвращают ответ как дробное число. А в нашем коде написано:
int x = некоторое дробное;
Получается мы сохраняем дробное число в переменную, где могут храниться только целые, т.к. мы дали ей тип int. Компилятор переживает, что мы отбрасываем дробную часть, ведь возможно в ее вычислении и состояла вся задача.
Чтобы убрать ошибку нужно написать:
double x = Math.sqrt (100);
И другой вариант:
int x = (double) Math.sqrt (100);
Когда мы слева от имени функции в скобках указываем тип, мы говорим компилятору — привести то, что справа в указанному типу несмотря ни на что. В данном случае — отбросить дробную часть, потеряв точность. Это называется приведение типов — у нас еще будет об этом целая тема.
