Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: kaktus 15. 10. 2013, 10:41:25

Název: C++ knihovna pro floating-point čísla
Přispěvatel: kaktus 15. 10. 2013, 10:41:25
Mohli byste prosim poradit, jestli existuje do C++ knihovna pro praci s cisly v plavouci radove carce (nebo jak se tomu rika? :) - 0.1, 0.125,..) ktera zabira mene pameti nez float (2B na x86_64)?

Na netu nemuzu nic najit, nasel jsem akorat GNU MP, ktere je spis o opaku - cisla s vetsi presnosti nez double.

Jde mi proste o to vyjadrit par cisel, rekneme 0..1 s presnosti 0.1;

PS: vim, mohl bych si napsat svuj datovy typ, ale tam bude prevadeni, kontroly - tj rychlost asi pujde dolu. Takze idealne nejakou knihovnu, ktera je ASM/SSE optimalizovana na toto.

PS2: prijdu tim o SSE(2), asi jo, ze? 

Diky moc, Karel


PSS: ty turinguv test, nemohli byste prosim trochu zmirnit, pro nas hloupejsi lidi po ranu?
Na "Jaké zvíře se nachází ve slovním spojení „zrnko zelí“?" jsem zkousel koza, koze, F5 nenahodil jinou otazku..uz jsem myslel, ze se tu proste nezeptam! :P :)
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: gamer 15. 10. 2013, 10:55:10
http://software.intel.com/en-us/articles/performance-benefits-of-half-precision-floats
Jinak to ale doporučuju používat pouze v případě, že opravdu není jiná možnost ;)
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: hu 15. 10. 2013, 11:07:07
Jde mi proste o to vyjadrit par cisel, rekneme 0..1 s presnosti 0.1;

Tak pouzij fixed point.
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: Martin Jakl 15. 10. 2013, 11:42:54
A proč si je neuložíte do charu jako 0..10 a pak je jenom nezobrazíte jako desetinná.
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: Kolemjdoucí 15. 10. 2013, 11:46:58
Jestliže se jedná jenom o úsporu místa, pak knihovna netřeba, použije se normální datový typ float a jenom se udělá konverze z/do formátu 16 bit, je to pár bitových operací + ošetření na přetečení.
1 bit znaménko, 5 bitů exponent, 10 bitů mantisa.

A proč si je neuložíte do charu jako 0..10 a pak je jenom nezobrazíte jako desetinná.

Protože jasně napsal že to chce dostat do 2 BYTE.
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: mankind_boost 15. 10. 2013, 21:32:13
IMHO float má 32 bitů, ne 16.
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: xMartin 15. 10. 2013, 22:11:33
Po pár minutách hledání:
http://half.sourceforge.net/
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: kaktus 16. 10. 2013, 15:37:56
dekuji za odpovedi, "half-float" byl ten termin, co jsem potreboval!

Nasel jsem nekolik implementaci a vsechny funguji jako "storage type", a pro operace se prevadi na float.

Ad "pouzit char...", moje otazka, co je rychlejsi? Casto budu ta cisla cist a zapisovat, tj
half: prevod z/do float.
char: char/100 a prevod na float; float*100 a prevod na char.

Co z toho vyjde rychleji? Dekuji
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: gamer 16. 10. 2013, 17:36:56
Nejlíp vyjde koupit 2x víc paměti a zapomenout na half float ;). Jestli konverze int -> float nebo half float -> float bude při použití SSE asi skoro jedno. Pozor, některé implementace SSE na konverzi nepoužívají, pak bude half float -> float mnohem pomalejší. Pokud vím, tak ta odkazovaná knihovna half float SSE nepoužívá.
Název: Re:C++ knihovna pro floating-point čísla
Přispěvatel: Randolf 18. 10. 2013, 14:28:26
dekuji za odpovedi, "half-float" byl ten termin, co jsem potreboval!

Nasel jsem nekolik implementaci a vsechny funguji jako "storage type", a pro operace se prevadi na float.

Ad "pouzit char...", moje otazka, co je rychlejsi? Casto budu ta cisla cist a zapisovat, tj
half: prevod z/do float.
char: char/100 a prevod na float; float*100 a prevod na char.

Co z toho vyjde rychleji? Dekuji

hmm.. misto char/100 a char*100 bych asi spis pouzil shift-left a shift-right a bude to asi rychlejsi nez half-float
+ nektere DSP pouzivaji reprezentaci "fractional" pro cisla od -1 do 1. Myslim ze se vpodstate jedna o fixed-point aritmetiku, v GCC 4 podporovanou: http://gcc.gnu.org/wiki/FixedPointArithmetic (http://gcc.gnu.org/wiki/FixedPointArithmetic).