Czy warto korzystać z float zamiast double (oszczędność pamięci)

TLDR: Nie, nie warto.

618px-IEEE_754_Double_Floating_Point_Format.svg
Obrazek z https://en.wikipedia.org/wiki/Double-precision_floating-point_format

Wszędzie double

Wszędzie gdzie potrzebna jest wartość zmienno-przecinkowa używam double, ponieważ:

  • nie chce mi się rozkminiać, które wartości mogą być mniej dokładne (idąć dalej, co to znaczy mniej dokładne i kto o tym decyduje) – szkoda czasu.
  • gdyby system miał czasem float a czasem double – powodzenia w zabawie z konwersją, bo żeby je pomnożyć lub dodać to zostaną rozszerzone do double, a potem trzeba skrócić do float – szkoda czasu.
  • gdyby system miał wszędzie float – to by oznaczało, że ktoś świadomie przehandlował pamięć w zamian za dokładność – przypadek bardzo graniczny – w większości przypadków tak nie będzie, szkoda czasu.

Jeden raz użyłem float

Jedyny przypadek gdy w moim kodzie świadomie użyłem floata był gdy zczytywane były dane z mikrokontrolera i one rzeczywiście były floatem.

Float nie jest szybszy niż double

Jeśli już chcemy zchodzić tak głęboko to z Float vs Double Performance wynika:


On x86 processors, at least, float and double will each be converted to a 10-byte real by the FPU for processing. The FPU doesn’t have separate processing units for the different floating-point types it supports.

ale znajdzie się przypadek szczególny, gdzie większy rozmiar doubla wpłynie na rozmiar danych wysyłanych jednorazowo do procesora i cache… itd.

Czy mnie to w ogóle powinno obchodzić?

Wchodząc na pole takich optymalizacji warto się cofnąć i zastanowić czy naprawdę każdy developer w zespole rozumie co to wszystko oznacza? Czy znajome są każdemu pojęcia bottleneck, false-sharing, branch prediction? Wiem, że w pisaniu aplikacji biznesowych nie każdy je zna i nie są one każdemu potrzebne. Wtedy jedynym drogowskazem jest pisanie w sposób możliwie prosty – wszędzie double.

A jak się ma do tego decimal?

Decimal służy do czegoś innego (głównie kwoty pieniężne), więc celowo pomijam go w tej dyskusji.

2 Comments on “Czy warto korzystać z float zamiast double (oszczędność pamięci)

  1. ooo, Decimal jest jak najbardziej typem zmienno przecinkowym, tylko podstawę ma inną(zamiast 2 ma 10), i stąd jego cały urok 🙂

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s