15 Ekim 2018 Pazartesi

IEEE 754 ve Roundtrip İşlemler

Roundtrip Formatlama Nedir
String' çevirip tekrar floating pointe çevirmeyi garanti etmek için kullanılır

C
Şu tarz kodları kullanmamak lazım. Çünkü 56 çok büyük bir rakam
double a = 0.1;
printf("a is %0.56f\n", a);
C++
float için 7 double için 17 precision kullanırız.
float  myfloat  = 3.14159625F;
double mydouble = v;

std::stringstream s;

// Setting the stream state:
s << std::setprecision(9) << v << " "
  << std::setprecision(17) << vv;

float  myfloat_in;
double mydouble_in;

s >> myfloat_in >> mydouble_in;
assert(myfloat == myfloat_in && mydouble == mydouble_in);
C#
R'nin açıklaması şöyle
"R" or "r" Round-trip Result: A string that can round-trip to an identical number. Supported by: Single, Double, and BigInteger. Precision specifier: Ignored.
Basitçe şöyle kullanırız:
double d1 = 0.84551240822557006;
string s = d1.ToString("R");
double d2 = double.Parse(s);
Eğer round trip yapmazsak hatalarla karşılaşabiliriz.
float maxFloat = float.MaxValue;
string s = maxFloat.ToString();
float result = float.Parse(s); // same with Convert.ToSingle(s);

bool mustEqual = (maxFloat == result);
// It returns FALSE, why?


Hiç yorum yok:

Yorum Gönder