Cześć chłopaki, dla mojej klasy muszę wykonać pierwiastek kwadratowy, ale to nie działa !! HELLPP!
Wyzwanie:
Write a function or program that will "make a number square root".
Uwaga: To jest trolling kodu. Podaj „przydatną” odpowiedź, która poprowadzi tego nowego programistę na jego drodze do sukcesu programistycznego! Bądź kreatywny!
Odpowiedzi:
Jawa
Wow, to skomplikowany problem. Nigdy wcześniej nie robiłem pierwiastka kwadratowego. Wziąłem pierwiastki kwadratowe, ale jeszcze tego nie zrobiłem. Nie zapomnij, aby Twój kod wyglądał ładnie na dodatkowe kredyty na zajęciach. Oto kod, który tworzy pierwiastek kwadratowy z wprowadzonej liczby:
Trolle:
System.out.print
s nie drukowaćjava.lang.System.out.print
. Drukują do klasy wewnętrznej. Pierwsze dwa (które mają wypisywać ciągi) nic nie robią; Druga:100
) ?:0
. Nie powiedzie się przez nieskończoną pętlę, gdy wejście jest ujemne z tego samego powodu, że zawiedzie przez nieskończoną pętlę, gdy wejście jest0
.źródło
JFrame.DO_NOTHING_ON_CLOSE
setAlwaysOnTop(true)
.C ++
Cóż, jeśli nie masz lepszej trasy, zawsze istnieje rozwiązanie brutalnej siły:
Powoduje to iterację każdej możliwej wartości a
double
(poprzezunion
dodanie do niejlong long
tej samej wielkości bitu, ponieważ nie ma dobrego sposobu na iterację poprzez użycie dubletów jako rzeczywistych dubletów), dopóki nie znajdzie tej, której kwadrat jestn
.źródło
double
i Along long
jest najbardziej przerażającą rzeczą, jaką kiedykolwiek widziałem.union
jest nieokreślonym zachowaniem, a iteracja przez podwójne jest możliwa dzięki funkcjistd::nextafter
std::nextafter
istniało, zanim mi o tym wspomniałeś, więc tak, było to pożądane.double
wartości nie można również uzyskać przez pomnożeniex*x
gdziex
jestdouble
. Więc wyszukiwanie czasami się nie powiedzie (przez większość czasu?), Dając NaN zamiast bardziej poprawnego wyniku.Python 3
Ten prosty kod da dokładną odpowiedź:
źródło
W Pythonie 3 możesz wykonać następujące czynności:
źródło
Poprawiając tę odpowiedź ,
To po prostu źle. Wszyscy wiedzą, że najszybszy to ASM.
Czysty x86_64 ASM!
W przeciwieństwie do innych opóźnionych odpowiedzi, ta ma złożoność O (1)!
I w przeciwieństwie do innych odpowiedzi, jest to 101% precyzji,
sqrt(0.5)
ponieważ daje0.70710678118655
!źródło
PCMPEQQ
już nie wydają się wam „magicznymi, nieczytelnymi śmieciami wytwarzanymi przez kompilator”Pyton
Jeśli jest to dozwolone w twojej klasie, możesz użyć złożonej biblioteki matematycznej jako pomocnika tutaj, zainstaluj ją, uruchamiając polecenie:
Następnie wystarczy uruchomić taki skrypt w języku Python:
(Upewnij się, że uruchamiasz to z uprawnieniami administratora)
źródło
root
w Unixland).do
Oczywiście jest to najlepszy sposób. Jest tak szybki, jak można sobie wyobrazić, patrząc na kod. Używanie C, ponieważ C jest najszybszy, a ten problem wymaga szybkiego rozwiązania. Przetestowałem to dla moich ulubionych liczb, takich jak 7, 13 i 42, i wydaje się, że działa.
źródło
results[number];
?do
Sztuczki i magia sprawią, że zadziała.
źródło
Python 3
Robicie to wszystko źle. Każdy może zobaczyć, że pierwiastek kwadratowy z 20 nie wynosi 4,47213595499958, a nawet √20. To rozwiązanie przenosi trudne zadanie obliczenia pierwiastka kwadratowego do modułu przeznaczonego do tego celu.
Jednym z takich modułów jest sympy, która zapewnia matematykę pierwiastków kwadratowych. W przeciwieństwie do innych rozwiązań tutaj robi wszystko właściwie. Zakłada nawet, że sqrt (-1) to I - żadne z rozwiązań tutaj tego nie rozwiązuje.
A oto kod modułowy, czyli jak wyglądają dobre programy. Funkcje powinny być tak małe, jak to możliwe, jeśli nie są, oznacza to, że piszesz okropne programy. Ponadto programy powinny mieć wiele komentarzy.
A oto przykład działania tego programu.
źródło
print_format_prompt_with_thing_to_specify_get_default_prompt_format_to_getattr_get_sys_name_from_get_stdout_name_and_print_square_root_of_read_from_stdin_and_print_get_string_from_get_newline_to_getattr_get_sys_name_from_get_stdout_name
.JavaScript
Niestety, JavaScript nie obsługuje symbolu pierwiastka kwadratowego dla nazw funkcji. Zamiast tego możemy użyć innego znaku alfabetu Unicode do przedstawienia funkcji pierwiastka kwadratowego.
W tym przykładzie użyję
ᕂ
.Po uzyskaniu prawidłowego symbolu możemy użyć obiektu Math do wygenerowania funkcji pierwiastka kwadratowego.
To proste! :)
źródło
Julia
Oczywiście najlepszy sposób, aby to zrobić, używając kwadratu z serii Taylor:
To faktycznie generuje bardzo dokładne wartości:
Ale oczywiście, podobnie jak aproksymacja (a także być konwergentną serią), jest bezużyteczny dla wartości zbliżonych do 1:
źródło
a^2
(n razy) i pomnożę przeza
(n razy) odpowiedź (sqrt(x)~a^n*sqroot(x/a^2n)
) x-> 0 (jeśli a> 0) nie do 1 (dając duże błędy). Również jeśli x / a ^ 2n ~ 1 liczbya!=x
in
zmienią się dla arbitralnegox
uzyskania pożądanej recepty (co jest denerwujące i czasochłonne, aby je znaleźć).Lateks
Rozwiązanie tego problemu jest dość trudne i bardzo złożone, więc weź kawę. Problem polega na tym, że w zależności od tego, jaki numer chcesz, znacznik kwadratowy kodu zmienia się znacząco. Pokażę ci problem. Powiedzmy, że
9
to twój numer. Następnie kod wyglądałby tak:Powiedzmy teraz, że
1234321
to twój numer, spójrz na kod:Na koniec powiedzmy, że twój numer to
0
.Dobrym sposobem na rozwiązanie tego jest napisanie programu w
Ook!
lubPiet
, który chce twój numer i wypisujeLaTeX-sqrt-code
go. Oto bardzo prosty przykładOok!
, ponieważ jest on w stanie odczytać tylko jeden bajt i nie sprawdza, czy ten bajt jest prawidłowy, czy nie, ale myślę, że przejdziesz do sedna.To samo dla
Piet
:To byłby najbardziej wydajny sposób. Proponuję również użyć,
Piet
ponieważ jest to za każdym razem piękne dzieło sztuki, więc rzeczy nie nudzą się szybko.źródło
Haskell
Przestałem ufać komputerom, kiedy po raz pierwszy usłyszałem o błędach zmiennoprzecinkowych. Mówiąc poważnie, jeśli nawet Google nie może ich kontrolować , to kto może?
Więc naszym najlepszym rozwiązaniem jest znalezienie rozwiązania obejmującego tylko liczby całkowite. Na szczęście jest to łatwe, ponieważ możemy po prostu sprawdzić wszystkie liczby, ponieważ każdy interwał [1..n] zawiera tylko ich skończoną liczbę, nie tak jak w przypadku bzdurnych aleph-1. Oto przykładowa implementacja w Haskell:
Działa jak urok, sprawdź to:
Dokładność powinna wystarczyć dla większości aplikacji.
źródło
double
s, a DDG używatriple
s.Jawa
Najdokładniejszym sposobem na to jest iteracja. Najpierw zapętlaj
integer
s, aż przejdziesz nad celem, a następnie przełącz się nadouble
s. Ta metoda ma tę zaletę, że jest dokładna , w przeciwieństwie do innych metod „szacowania”, które możesz zobaczyć. Poświęcasz trochę prędkości, ale w przypadku większości aplikacji jest to dokładnie to, czego potrzebujesz.Możesz zmodyfikować tę odpowiedź w zależności od tego, jak precyzyjnie musisz być, ale powinno to działać co najmniej do jednej miliardowej:
źródło
0.000000001
polega na tym, że jest podatny na błędy zaokrąglania. Stworzyłem bardziej precyzyjne rozwiązanie w C ++.Math.nextUp(root)
zamiast+0.000000001
? Trwałoby to znacznie dłużej ... i gwarantujemy sukces.Double
i byłem zaskoczony, gdy nie mogłem jej znaleźć. Nie pomyślałem, żeby zajrzeć do środkaMath
, ale działa całkiem dobrze. Nie zdarzyło mi się jeszcze, że „zawiodło” na niczym.JavaScript
Tych magicznych stałych można użyć do obliczenia pierwiastka kwadratowego liczby za pomocą alfabetu:
Testy:
Wygląda na to, że działa całkiem dobrze. Zastanawiam się, czy istnieje krótsza droga?
źródło
JavaScript
Bardzo trudny problem!
W JavaScript nie ma takiej wbudowanej funkcji ...
Wygląda jak zadanie dla solvera Newtona-Raphsona.
Teraz możesz użyć
Math.sqrt
źródło
JavaScript / ActionScript
Nie ma sposobu, aby bezpośrednio obliczyć pierwiastek kwadratowy w ActionScript lub JavaScript, jednak istnieje obejście tego problemu. Możesz uzyskać pierwiastek kwadratowy z liczby, podnosząc go do
1/2
potęgi.Tak to wyglądałoby w JavaScript i ActionScript 2:
I chociaż funkcja działa równie dobrze w ActionScript 3, zaleciłbym użycie zmiennych typowych i zwracanych wartości dla przejrzystości i niezawodności:
Troll:
źródło
1/2 == 0
.Python 2.7
Wyjaśnienie
Cytowanie
Wikipedia - pierwiastek kwadratowy
W matematyce pierwiastek kwadratowy z liczby a jest liczbą y taką, że y 2 = a
Innymi słowy, każda liczba jest pierwiastkiem kwadratowym z innej liczby.
Uwaga
To pytanie jest dla mnie podobne do znanej łamigłówki. Jak skrócić linię, nie pocierając jej ani nie przecinając
źródło
PHP (i inne):
Ponieważ sposób, w jaki zostało to opisane, pytanie nie oznaczało, że musimy go obliczyć, oto moje rozwiązanie:
Zapewnia sposób dokładnego obliczenia pierwiastka kwadratowego w wielu językach.
Lista języków może zostać rozszerzona.
Wartość można wysłać za pomocą POST, GET, ciasteczka, a nawet zapisać w sesji.
Jeśli podasz tylko liczbę, myli się i podaje obliczony wynik, który obowiązuje (prawie) KAŻDY język kiedykolwiek!
źródło
do
To jest lepsze niż wszystkich pozostałych 27 odpowiedzi bo to wszystko niedokładne. Zgadza się, podają tylko jedną odpowiedź, kiedy powinno być 2. Ta nawet nie próbuje odpowiedzieć, jeśli będzie źle, po prostu się poddaje i zaokrągla w dół.
Trolling kodu:
for
nadużywanie pętli#define
użyj, abyzwiększyćczytelność√1024
zwraca3√1024 = ∓32
, co jest po prostu błędne)źródło
#define the number
... miły! Podobało mi się w szczególności twoje rozumowanie dotyczące warunku pokazania komunikatu o użytkowaniu.C ++
na podstawie http://en.wikipedia.org/wiki/Fast_inverse_square_root i odpowiedzi @ snack.
Z wyjątkiem zamiast rygoru na drodze do konwersji x ^ (- 0,5) na x ^ (0,5) zmodyfikowałem algorytm, aby zrobić to bezpośrednio.
ALGORYTM
Rzuć liczbę zmiennoprzecinkową (w tym przypadku podwójną) na liczbę całkowitą (w tym przypadku długą).
Pierwsze kilka bitów liczby zmiennoprzecinkowej jest wykładnikiem wykładni: liczba jest przechowywana jako 2 ^ AAA * 1.BBBBBBB. Więc zrób przesunięcie w prawo, a ten wykładnik zmniejszy się o połowę.
W pierwotnym odwrotnym pierwiastku kwadratowym liczba ta została odjęta od stałej, aby uzyskać odwrotność. Po prostu dodaję to do stałej, ponieważ chcę bezpośrednio pierwiastka kwadratowego. Wartość stałej jest wybierana, aby dać odpowiedź, która jest najlepszym przybliżeniem pożądanej wartości.
Rzuć liczbę z powrotem na zmiennoprzecinkową.
Opcjonalnie można zastosować jedną lub dwie iteracje metody Newtona, aby poprawić wynik, ale nie zawracałem sobie głowy, ponieważ chciałem zobaczyć, jak blisko mogę się zbliżyć.
Zastosowane stałe wyglądają bardzo tajemniczo, ale poza pierwszymi kilkoma cyframi wartości nie są krytyczne. Znalazłem stałą metodą prób i błędów. Przestałem, gdy tylko dostałem wartość, która czasem była niedoceniana, a czasem przeceniana.
Wyniki
Rzutowanie jest konieczne tylko dlatego, że C nie pozwala na wykonywanie operacji przesunięcia bitów na liczbach zmiennoprzecinkowych, więc jedynymi prawdziwymi operacjami są przesunięcie bitów i dodanie. Nie użyłem ani jednej iteracji metody Newtona, aby poprawić wynik, więc precyzja jest niezwykła. Nauczyciel OP będzie pod wrażeniem szybkości metody, która (szczerze mówiąc) jest wystarczająco dokładna do wielu celów!
źródło
10
* 1.000
, sqrt (4) = 2 ^01
* 1.000
= 2, sqrt (2) = 2 ^00
* 1.100
= 1,5 Zatem1
bit przesunięty poza wykładnik daje mantysę 1,5, co nie jest daleką od prawdziwej wartości sqrt (2), która wynosi około 1,4. Ale nie mam pojęcia, jak konsekwentnie daje odpowiedzi z dokładnością lepszą niż 3%.mi
Uwaga: działa to tylko na moim komputerze, ponieważ podstawowy sprzęt nie przechowuje liczb w formacie binarnym, ale w bazie e, tak że to, co wygląda jak
10
reprezentuje e,100
reprezentuje e e i tak dalej. W ten sposób to, co można nazwać na maszynie binarnej przesunięciem bitów w lewo, wykonuje x => e x , a to, co można nazwać na maszynie binarnej przesunięciem bitów w prawo, wykonuje x => ln x. Oczywiście trudno jest przedstawić swoje podstawowe liczby na tym bardzo ograniczonym, skoncentrowanym na binarnie medium internetowym, ale robię co w mojej mocy.Składnia E jest niezwykle podobna do C / C ++, więc powinna być łatwa do zrozumienia dla większości ludzi.
źródło
n >> 1
to nie to samo colog(n)
.JavaScript / HTML / CSS
Myślałem o użyciu jQuery i identyfikatorów do trollowania trochę więcej, ale wolę waniliowe js.
Wynik nie jest idealnie precyzyjny, ale działa!
źródło
GeoGebra
Odczytaj wartość swojej odpowiedzi z osi współrzędnych.
Wypróbuj online tutaj (wymaga Java) lub skorzystaj z poniższych zrzutów ekranu:
źródło
100% czystej bash (na podstawie liczb całkowitych)
Z prezentacją ascii-art:
Ten idealny pierwiastek musi być uzyskany w trybie bash za pomocą
source
poleceniaStara (tę wersję można po prostu wkleić w dowolnym terminalu konsoli)
Będzie działać jak:
Uwaga: pierwiastek jest kwadratowy !!
źródło
Jawa
Dzięki, dla ggmx za kod generujący n cyfr pi w Javie .
Nie miałem ochoty implementować danych wejściowych. Aby przetestować zmianę kodu
sqrtThis
iexpectedPercision
.Oto jak działa kod. Po pierwsze, uzyskanie katalogu głównego sqrt dla liczby całkowitej jest trywialne, więc nie miałem ochoty go wdrożyć i zamiast tego użyłem javas wbudowanych w sqrt fcn. Reszta kodu jest jednak w 100% legalna.
Podstawowa idea,
ponieważ pi jest nieskończoną długą, nie powtarzającą się liczbą dziesiętną, wszystkie sekwencje liczb muszą się w nim znajdować(czytaj edytuj). Dlatego twoja odpowiedź jest w pi! W związku z tym możemy po prostu zastosować wyszukiwanie wyrażeń regularnych na pi szukając odpowiedzi. Jeśli nie jesteśmy w stanie znaleźć dobrej odpowiedzi, podwoimy rozmiar pi, którego szukamy!To naprawdę łatwe, w rzeczywistości można powiedzieć, że to tak proste jak pi :)
Nie udowodniono, że Edit Pi zawiera w sobie każdą sekwencję liczb skończonych. Fakt, że pi jest nieskończony i niepowtarzalny, nie jest wystarczającym dowodem na takie stwierdzenie, jak udowodnił Exelian. Jednak wielu matematyków uważa, że pi zawiera każdą sekwencję liczb skończonych.
źródło
JQuery
ten jest najdokładniejszy (bonus: działa również na litery!)
Oto skrzypce
źródło
document.write
przeciwdziałać.C ++
To w końcu da ci pierwiastek kwadratowy.
Poprawiłem kod, aby lepiej odzwierciedlał pytanie. Dziękujemy za sugestie ... kod został zaktualizowany.
źródło
x+=1e-16
?DBL_EPSILON
.Pyton
To rozwiązanie:
Spojler:
Kod:
źródło
C ++
Twoje pytanie się nie kompiluje, ponieważ umieściłeś! na końcu. C ++ nie lubię!
Oto prawidłowe pytanie dla kompilatora:
Och .. i plik make.
i 26317.def. To powinno już być obecne w twoim kompilatorze
Tak, ktoś może użyć -E, aby wypisać poprawną odpowiedź wstępnego przetwarzania, ale jeśli znasz -E, wiesz również, jak wykonać rootroot. : P Oto niektóre wstępnie przetworzone. Bardzo słabe minimalne rozwiązanie, brak kontroli granicznej, bez monitowania. TIL, że trygrafty są wstępnie przetwarzane.
źródło