C++ knihovna pro floating-point čísla

kaktus

C++ knihovna pro floating-point čísla
« kdy: 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 :)
« Poslední změna: 15. 10. 2013, 10:47:43 od Petr Krčmář »


gamer

Re:C++ knihovna pro floating-point čísla
« Odpověď #1 kdy: 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 ;)

hu

Re:C++ knihovna pro floating-point čísla
« Odpověď #2 kdy: 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.

Martin Jakl

Re:C++ knihovna pro floating-point čísla
« Odpověď #3 kdy: 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á.

Kolemjdoucí

Re:C++ knihovna pro floating-point čísla
« Odpověď #4 kdy: 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.


mankind_boost

Re:C++ knihovna pro floating-point čísla
« Odpověď #5 kdy: 15. 10. 2013, 21:32:13 »
IMHO float má 32 bitů, ne 16.

xMartin

Re:C++ knihovna pro floating-point čísla
« Odpověď #6 kdy: 15. 10. 2013, 22:11:33 »
Po pár minutách hledání:
http://half.sourceforge.net/

kaktus

Re:C++ knihovna pro floating-point čísla
« Odpověď #7 kdy: 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

gamer

Re:C++ knihovna pro floating-point čísla
« Odpověď #8 kdy: 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á.

Randolf

Re:C++ knihovna pro floating-point čísla
« Odpověď #9 kdy: 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.