Добрый день. Я, используя метод Math.sqrt(a), наткнулся на проблему, что не могу найти как он устроен внутри, подскажите пожалуйста кто-нибудь, как реализуется математика метода в коде.
Для целочисленных значений я на коленке сварганил это, у оригинального что-то подобное?
package com.DedAzazay.JavaHome
import java.io.InputStreamReader;
import java.io.BufferedReader;
class Root {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int rootIn = Integer.parseInt(reader.readLine());
if (sqrt(rootIn) != 0) {
System.out.println("Koren' chisla " + rootIn + " = " + sqrt(rootIn));
}else {
System.out.println("U chisla " + rootIn + " net kornya");
}
}
public static int sqrt(int a) {
int result = 0;
for (int i = 1; i < a; i++) {
if (a / i == i) {
result = i;
break;
}
}
return result;
}
}
DedAzazay
15 уровень
Как работает java.lang.Math.sqrt?
Комментарии (14)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
VladimirMaster
20 февраля 2021, 15:26
Что мешает тебе посмотреть сорцы?
И складывай код в тег code. У тебя в панели, когда пишешь текст, есть. Смотри внимательно.
+3
DedAzazay
20 февраля 2021, 15:55
Спасибо большое, так и буду. Писал в первый раз не всё потыкал в интерфейсе.😀
+1
hidden #2322530
20 февраля 2021, 11:15
оригинальный принимает числа double
0
DedAzazay
20 февраля 2021, 11:19
Да это я знаю, Вы мне подскажите, что внутри у него творится с точки зрения кода?
0
hidden #2322530
20 февраля 2021, 11:30
я так понимаю ровно так же, как и в С++ , потому что native методы работают уровнем ниже.
+2
DedAzazay
20 февраля 2021, 11:42
Оо! Спасибо большое, дойду до native разберусь тогда, спасибо за подсказку!
0
Anonymous #2497433
20 февраля 2021, 11:56
а почему ты спросил про sqrt ,если мы не дошли до него?
0
hidden #2322530
20 февраля 2021, 12:06
а зачем до него доходить. открываешь библиотеку Math и используешь любые нужные тебе методы. это не запрещено.
0
Anonymous #2497433
20 февраля 2021, 12:10
все верно, просто вопрос был в другом. сначала автор поста спросил о том, что не проходил, и заинтересовался (даже пытался сам подумать как работает этот метод), но когда он узнал, что это native, то сказал, что разберется с вопросом потом, когда доберется до него. поэтому мне стало интересно, почему бы сейчас не разобраться с native и потом уже с sqrt
0
DedAzazay
20 февраля 2021, 12:11
Парарельно начал читать книжку
Роджерс Кейденхед --- Java за 24 часа
Там в первой части четвертое занятие
Идёт листинг очень простой на нахождение корня квадратного из числа с помощью Math.sqrt, но я занимаюсь просто на работе с рабочего компа и проверить код не могу (пишу программки в notepad++) поэтому трассирую в ручную глазами и на бумажке. Соответственно так как внутренней реализации пока не знаю, решил изобрести велосипед потому как любопытный до жути.
Собстна изобрёл велик, и было интересно вдруг у меня колёса квадратные?
Кстати нашёл библиотеку соответствующую, он рил из С взята FDLIBM вот.
Так что впереди натив!!
+1
Anonymous #2497433
20 февраля 2021, 12:16
круто. спасибо за ответ, просто реально интересно стало))
0
hidden #2322530
20 февраля 2021, 12:17
автор поста сказал что не знает, как он устроен внутри. а не то, что он его не проходил. я 2 раза перечитал, фразы "не проходил" не увидел.
с native нечего разбираться. native помечаются методы, которые имеют реализацию на более низком уровне (например ниже JVM). и описания логики найти сложнее.
https://ru.stackoverflow.com/questions/971711/c-в-java-Или-ключевое-слово-native
https://vk.com/@-148959551-native-metody-v-java-jni-java-native-interface
многие методы класса System являются тоже native, поэтому например копирование массивов работает через System.arraycopy(), потому что это быстрее.
0
Anonymous #2497433
20 февраля 2021, 12:22
спасибо, очень интересно
(я имел в виду, что по курсу JavaRush не проходил, я ведь не знал, что он одновременно книгу читает, поэтому и спросил. просто я еще подумал, может быть я что-то упустил по курсу)
0
VladimirMaster
20 февраля 2021, 15:31
Минус в карму, за изобретение велика. За такое по рукам настукают в следующий раз. Изобретение велика, антипатерн, за который не то, что по рукам дают, а пинают под зад.
SOLID and GOF Patterns ковыряй. На порядок важнее будет.
0