agata Odesláno December 5, 2015 Nahlásit Odesláno December 5, 2015 Столкнулась с "небольшой" проблемой. Предположим есть большое число 15226050279225333605356183781326374297180681149613806886579084945801229632589528 97654000350692006139. Как мне взять из него корень квадратный, чтобы ответ не выдавал это: 3.9020571855401265512289573339484371018905006900 × 10^49 (как на одном онлайн калькуляторе) или это 12339388.266533 (так как 12339388.266533*12339388.266533=1.52260502792252274647840089 × 10^14).....а получить максимально правильный ответ из цифр без всяких дополнительных 10 в любой степени.... то есть если я сделаю обратную операцию и умножу число на само себя, то получу свое изначальное.... есть идеи? я пока не могла ничего найти...как впрочем и не понимаю как написать простой алгоритм именно для такого большого числа..... p.s. может кто-то может за деньги мне написать или пояснить как написать такой квадратнокоренневый калькулятор?
Archer Odesláno December 5, 2015 Nahlásit Odesláno December 5, 2015 есть идеи? я пока не могла ничего найти...как впрочем и не понимаю как написать простой алгоритм именно для такого большого числа..... Wiki (сложно там всё...) https://ru.wikipedia.org/wiki/%D0%94%D0%BB%....80.D0.BD.D1.8F В каких языках есть реализация http://ru.stackoverflow.com/questions/4084...%B0%D0%BC%D0%B8
agata Odesláno December 5, 2015 Autor Nahlásit Odesláno December 5, 2015 Спасибо. Про сложности читала и библиотеки....над как-то все же мне решить задачку...
younghacker Odesláno December 7, 2015 Nahlásit Odesláno December 7, 2015 устроит? echo "sqrt(1522605027922533360535618378132637429718068114961380688657908494580122963258 952897654000350692006139)" | bc 39020571855401265512289573339484371018905006900194 Исходники здесь Упс... Не пойдёт. echo "39020571855401265512289573339484371018905006900194^2" | bc 15226050279225333605356183781326374297180681149613194702138326818464255072074390 21844382752677237636 Разбежка начинается после 50-го разряда.
Andruxa Odesláno December 7, 2015 Nahlásit Odesláno December 7, 2015 Написать программку нет никаких проблем. Алгоритм проходили в школе.
agata Odesláno December 7, 2015 Autor Nahlásit Odesláno December 7, 2015 Написать програмку проблемы есть, так как с большими числами надо, по идее, делать конвертацию числа....так как домашние компы используют 8 байт максимум для операций с числами. Как понимаю для подобного калькулятора надо использвать длинную арифметику. Пока у меня в голове картинки нет как это сделать. Не хватает знаний.А онлайн посчиать почти не реально, даже на таком онлайн ресурсе как http://www.wolframalpha.com/. Например, если число больше указанного, то уже идут глюки. Да и указанное число отчасти глючит. Завтра попробую поиграться дальше. Но, есть у меня ощущение, что буду искать програмиста для написания калькулятора (плюс, минус, умножить, разделить, степень 2 и корень квадратный).....
Archer Odesláno December 7, 2015 Nahlásit Odesláno December 7, 2015 Что-то я не понимаю. В чём вопрос? Надо пользоваться? Так уже показали, что калькулятор bc (для командной строки юникса или линукса) это умеет. Или на Python можно считать, он под любую платформу есть. Или непременно надо самой алгоритм написать, исходя из того, что язык программирования ограничен 8 байтами?
agata Odesláno December 8, 2015 Autor Nahlásit Odesláno December 8, 2015 Archer, проблема: Упс... Не пойдёт.....Разбежка начинается после 50-го разряда. Вечером вчера-сегодня тестирую существующие варианты, чтобы понять стоит ли "выдумывать велосипед" (брать программера) или обойдусь тем, что есть.
drud Odesláno December 8, 2015 Nahlásit Odesláno December 8, 2015 Есть библиотека gmpy2 специально для работы с очень большими числами. import gmpy2 n = gmpy2.mpz(1522605027922533360535618378132637429718068114961380688657908494580122963258 952897654000350692006139) gmpy2.get_context().precision=2048 x = gmpy2.sqrt(n) print "Initial:", n print "Result:", x print "Check:", x * x Дает следующий результат: Initial: 15226050279225333605356183781326374297180681149613806886579084945801229632589528 97654000350692006139 Result: 39020571855401265512289573339484371018905006900194.7844380 ... многацифр ... Check: 15226050279225333605356183781326374297180681149613806886579084945801229632589528 97654000350692006139.0 P.S. есть еще просто gmpy, но у нее sqrt целый результат возвращает, а вам, я так понимаю, наибольшая точность нужна. P.P.S. если хотите, могу вам web интерфейсик к этому вычислению сделать, где можете с разными числами и точностью "поиграться".
agata Odesláno December 8, 2015 Autor Nahlásit Odesláno December 8, 2015 Есть библиотека gmpy2 специально для работы с очень большими числами. import gmpy2 n = gmpy2.mpz(1522605027922533360535618378132637429718068114961380688657908494580122963258 952897654000350692006139) gmpy2.get_context().precision=2048 x = gmpy2.sqrt(n) print "Initial:", n print "Result:", x print "Check:", x * x Дает следующий результат: P.S. есть еще просто gmpy, но у нее sqrt целый результат возвращает, а вам, я так понимаю, наибольшая точность нужна. P.P.S. если хотите, могу вам web интерфейсик к этому вычислению сделать, где можете с разными числами и точностью "поиграться". Очень хочу и буду признательна!
Recommended Posts
Pokud chcete odpovídat, musíte se přihlásit nebo si vytvořit účet.
Pouze registrovaní uživatelé mohou odpovídat
Vytvořit účet
Vytvořte si nový účet. Je to snadné!
Vytvořit nový účetPřihlásit se
Máte již účet? Zde se přihlašte.
Přihlásit se