Witam, czy ktoś może mi wytłumaczyć dlaczego pierwiastek liczby całkowitej integer(np 9) czyli 3 jest liczbą typu float a nie int?
A dalczego wynik pierwiastkowania miałby być liczbą całkowitą?
To zrób sobie rzutowanie i będziesz miał inta. Tak naprawdę mógłby zwracać stringa a tego byś nawet nie zauważył.
Rozwijając to, co napisał furious programming: operacja pierwiastkowania niektorych liczb zawraca liczbę zmiennoprzecinkowa, dlatego nawet jak Ty wiesz, że wynik jest całkowity, to zwracany jest float, bo PHP nie wie, co będziesz pierwiastkował.
@mamon zrobiłem mały research i wygląda na to, że PHP pod spodem używa funkcji do pierwiastkowania z C. W C z kolei zmienne się deklaruje z typem. Czyli nie $dupa =
i można do niej zapakować co się chce, tylko double dupa =
i wtedy można tylko załadować double. Dlatego też PHP zawsze zwraca double (czyli liczbę zmiennoprzecinkową), nawet jeżeli pierwiastkujemy liczby, które dają nam liczby całkowite :) Niestety nie udało mi się odszukać, czy C ma swoją implementację pierwiastkowania, czy używa czegoś co pochodzi z hardware czy Bóg wie czego.
Desu napisał(a):
Rozwijając to, co napisał furious programming: operacja pierwiastkowania niektorych liczb zawraca liczbę zmiennoprzecinkowa, dlatego nawet jak Ty wiesz, że wynik jest całkowity, to zwracany jest float, bo PHP nie wie, co będziesz pierwiastkował.
@mamon zrobiłem mały research i wygląda na to, że PHP pod spodem używa funkcji do pierwiastkowania z C. W C z kolei zmienne się deklaruje z typem. Czyli nie
$dupa =
i można do niej zapakować co się chce, tylkodouble dupa =
i wtedy można tylko załadować double. Dlatego też PHP zawsze zwraca double (czyli liczbę zmiennoprzecinkową), nawet jeżeli pierwiastkujemy liczby, które dają nam liczby całkowite :) Niestety nie udało mi się odszukać, czy C ma swoją implementację pierwiastkowania, czy używa czegoś co pochodzi z hardware czy Bóg wie czego.
W kwestii ostatniej wątpliwości, wszystko zależy od biblioteki standardowej. Jeśli jest to akurat glibc
albo inna popularna biblioteka, oraz kompilacja odbywa się na sprzęt z wystarczająco zaawansowanym FPU (floating processing unit), to będzie wywołana instrukcja maszynowa licząca pierwiastek kwadratowy.
mamon napisał(a):
Witam, czy ktoś może mi wytłumaczyć dlaczego pierwiastek liczby całkowitej integer(np 9) czyli 3 jest liczbą typu float a nie int?
Pierwiastek liczby 9 jest liczbą całkowitą.
https://ideone.com/JTeO98
Wersja dla PHP-owców lub niedowiarków:
https://ideone.com/0CGcDT
Edit: tutaj prostsze (bo manualne) metody:
https://www.wikihow.com/Find-a-Square-Root-Without-a-Calculator
Dziękuje wszystkim za cenne odpowiedzi i poświęcony czas :)