Metody bibliotek matematycznych w Google Go Programming Language


9

Programuję w google Golang i cieszę się nim ze względu na jego zwięzłość, ale wydaje mi się zaskakujące, że prawie wszystkie standardowe metody matematyczne biblioteki są dla typu zmiennoprzecinkowego. Czy istnieje jakiś szczególny powód, dla którego te metody nie istnieją dla ints?

Odpowiedzi:


9

Krótka odpowiedź jest taka, że ​​Go jest następcą C, a standardowa biblioteka matematyczna C jest również zdefiniowana prawie wyłącznie w kategoriach wartości zmiennoprzecinkowych o pojedynczej i podwójnej precyzji.

Dłuższą odpowiedzią jest to, że w języku o typie statycznym bez polimorfizmu lub przeciążania funkcji, takim jak Go (lub C), musisz zdecydować się na typ, aby funkcja mogła przyjąć i powrócić z wyprzedzeniem, a kiedy masz do czynienia z określonych typów w bibliotece matematycznej, na liczbach zmiennoprzecinkowych jest o wiele więcej interesujących operacji niż na liczbach całkowitych. Aby wybrać kilka przykładów

  • pierwiastek kwadratowy lub n-ty liczby całkowitej lub liczby zmiennoprzecinkowej zwykle nie jest reprezentowany jako liczba całkowita

  • bardzo niewiele interesujących wartości funkcji transcendentalnych można przedstawić jako liczby całkowite

  • podział wartości zmiennoprzecinkowych wymaga mniej zaokrąglania niż podział liczb całkowitych

Zauważ, że nie jest to tak uciążliwe, jak mogłoby się wydawać, jeśli twoje wartości wejściowe są liczbami całkowitymi - wartość całkowitą można przekonwertować na wartość zmiennoprzecinkową za pomocą prostego rzutowania czcionek i przede wszystkim dokładnie.

Tak właśnie dzieje się w przypadku języków takich jak Go lub C. Inne języki mają inne opcje:

  • Język z dynamicznym typowaniem może zapewniać funkcje bibliotek matematycznych, które przyjmują lub zwracają wiele typów w zależności od tego, do czego są wywoływane lub od tego, czy zwracana wartość jest reprezentowana jako liczba całkowita.

  • Język z przeciążeniem funkcji może zapewniać wiele wersji tej samej funkcji, w zależności od przekazywanych typów (ściśle, są to wiele funkcji o tej samej nazwie, w odróżnieniu od powyższego przypadku dynamicznie typowanego)

  • Język z polimorfizmem typu (taki jak języki obiektowe z dziedziczeniem) może zdefiniować nadklasę „Number” z podklasami zarówno dla liczb całkowitych, jak i liczb zmiennoprzecinkowych, a następnie zdefiniować funkcje matematyczne w kategoriach tej klasy Number. Podejście to cechuje duża elastyczność dynamicznego podejścia językowego, przy jednoczesnym zachowaniu dużej rygorystyczności podejścia statycznego lub przeciążania funkcji.

Go nie ma jednak żadnej z tych funkcji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.