[QGHG-it-dev-list] Zadatak 41 - transformisanje iz double u string i obrnuto
Marko Vojinovic
vmarko at ipb.ac.rs
Sun May 10 21:14:09 CEST 2026
Implementirati dve staticke funkcije
string serialize_double_to_string ( double number )
double serialize_string_to_double ( string str )
koje transformisu double broj u string i obrnuto.
Broj tipa double treba da se transformise u string tako da se sva informacija o njemu koja postoji u memoriji enkodira u ASCII string na jednoznacan nacin. Drugim recima, treba u string zapisati znak, eksponent i mantisu znacajnih cifara koje masina pamti. Rezultujuci string treba da bude zapisan najbolje ASCII kodom, tako da moze bez problema da se stavi u XML fajl, za sve moguce input vrednosti double broja. Ukoliko je moguce, bilo bi pozeljno da string takodje bude i human-readable, tj. da direktnim gledanjem u string u XML fajlu mozemo relativno lako da saznamo vrednost broja koju taj string enkodira, ali ovo nije neophodno ako je preveliko cimanje za implementaciju.
Druga funkcija treba da uradi inverznu operaciju --- da zadati string transformise u double vrednost. Kompozicija obe funkcije treba da bude identitet u oba smera, u smislu da rezultujuci double nakon uzastopne primene obe funkcije bude jednak pocetnom double-u, a takodje i da rezultujuci string nakon uzastopne primene obe funkcije bude jednak pocetnom stringu (pod pretpostavkom da je pocetni string ispravno formatiran).
Takodje, razmisliti, predloziti i implementirati podrsku za "specijalne" brojeve tipa NaN, pozitivna i negativna nula, beskonacnost, i sve ostalo sto je definisano IEEE 754 standardom [1].
Algoritam za obe funkcije bi bilo dobro da bude platform-independent --- ne znam da li razliciti kompajleri pod "double" mozda podrazumevaju razlicite opsege vrednosti, imaju razlicite velicine mantisa, itdisl, pa to treba prouciti i napisati kod tako da funkcija zna kako da se ponasa kada je biblioteka kompajlirana datim kompajlerom na datoj platformi (npr. da shvati da li se izvrsava na 32-bitnom ili 64-bitnom hardveru, isl). Takodje, obe funkcije treba transparentno da podrzavaju sledeci scenario:
- Na jednoj platformi (recimo 64-bitnoj) se zada neki double broj, i funkcija ga pretvori u string, koji se zatim snimi u XML fajl.
- Taj fajl se zatim prebaci na drugu platformu (recimo 32-bitnu), otvori i procita.
- Funkcija za pretvaranje stringa u broj na drugoj platformi treba da ume da dekodira string iz fajla generisan na prvoj platformi:
- ako string sadrzi premalo cifara, dopuniti ih nulama,
- ako string sadrzi previse cifara, zaokruziti ga na podrzan broj cifara,
- itdisl.
Napomena: Na pocetku razmatranja ovog zadatka, najpre treba pretraziti i pregledati vec postojeca resenja za serializaciju double vrednosti u stringove i obratno. Ne zelimo da izmisljamo toplu vodu, pa ukoliko vec postoji neki upotrebljiv algoritam koji implementira sve ovo na zadovoljavajuci nacin, svakako ga treba iskoristiti (slobodno dodati taj kod u third_party_software direktorijum), radije nego da sami pisemo kod za sve ovo odozgo. U slucaju da postoji takvo gotovo resenje, gornje dve funkcije implementirati kao wrapper-e, da prosto pozovu odgovarajuce funkcije iz tog third-party koda i vrate odgovarajuci output.
Implementacije obe funkcije staviti u input_and_output.cpp i .hpp fajlove.
Unutar triangulator/test/ putanje dodati novi fajl double_string_serialize_test.cpp, koji ce razne vrednosti double brojeva da konvertuje u stringove, zatim stringove natrag u double vrednosti, da uporedjuje rezultate uzastopne primene obe funkcije, i da ispisuje sve te korake na stdout, da mozemo da vidimo da sve radi kako treba. Testirati kako regularne, tako i "specijalne" brojeve iz IEEE 754 standarda.
Ukoliko imate bilo kakva pitanja ili sugestije vezane za ovaj zadatak, slobodno se javite.
:-)
Marko
[1] https://en.wikipedia.org/wiki/Double-precision_floating-point_format
Dr. Marko Vojinovic
Group for Gravitation, Particles and Fields
Institute of Physics
University of Belgrade
======================
home page: www.markovojinovic.com
e-mail: vmarko at ipb.ac.rs
More information about the QGHG-it-dev-list
mailing list