Dlaczego pierwiastek liczby całkowitej jest liczbą typu float a nie int?

0

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?

0

A dalczego wynik pierwiastkowania miałby być liczbą całkowitą?

0

To zrób sobie rzutowanie i będziesz miał inta. Tak naprawdę mógłby zwracać stringa a tego byś nawet nie zauważył.

2

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.

2
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, 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.

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.

1
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

0

Dziękuje wszystkim za cenne odpowiedzi i poświęcony czas :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0