Prebral sem o razliki med dvojno natančnostjo in enojno natančnostjo. Vendar se zdi, da sta v večini primerov float
in double
zamenljiva, tj. uporaba ene ali druge ne vpliva na rezultate. Ali je temu res tako? Kdaj sta float in double zamenljiva? Kakšne so razlike med njima?
Tukaj je zapisano v standardih C99 (ISO-IEC 9899 6.2.5 §10) ali C++2003 (ISO-IEC 14882-2003 3.1.9 §8):
Obstajajo trije tipi plavajoče vejice:
float
,double
inlong double
. Tipdouble
zagotavlja vsaj enako natančnost kotfloat
, tiplong double
pa vsaj enako natančnost kotdouble
. Nabor vrednosti tipafloat
je podmnožica nabora vrednosti tipadouble
; nabor vrednosti tipadouble
je podmnožica nabora vrednosti tipalong double
.
Standard C++ dodaja:
Predstavitev vrednosti tipov s plavajočo vejico je izvedbeno določena.
Predlagam, da si ogledate odlično knjigo What Every Computer Scientist Should Know About Floating-Point Arithmetic, ki poglobljeno obravnava standard IEEE s plavajočo vejico. Spoznali boste podrobnosti predstavitve in se zavedali, da obstaja kompromis med velikostjo in natančnostjo. Natančnost predstavitve s plavajočo vejico se povečuje z zmanjševanjem velikosti, zato so števila s plavajočo vejico med -1 in 1 tista z največjo natančnostjo.
Plavajoči podatki imajo manjšo natančnost kot podvojeni. Čeprav to že veste, si za boljše razumevanje preberite What WE Should Know About Floating-Point Arithmetic.