June 07, 2011

Kesirli sayıların bit düzeninin bir bölümü değerlerinden başka bilgiler de taşıdığından, aynı büyüklükteki tamsayı tür kadar değer taşıyamıyorlar. float int'ten yetersizdir, double da long'dan:

import std.stdio;
import std.traits;

void main()
{
   dene!(int, float)();
   dene!(long, double)();
}

void dene(Tamsayı, Kesirli)()
   if (isIntegral!Tamsayı &&
       isFloatingPoint!Kesirli)
{
   /* Öylesine bir değer */
   Tamsayı t = Tamsayı.max / 3;
   Kesirli k = t;
   bilgiVer(t, "%d");
   bilgiVer(k, "%.0f");
}

void bilgiVer(T)(T değer, string düzen)
{
   writefln("%10s %s bayt; değer: " ~ düzen, T.stringof, T.sizeof, değer);
}

Çıktısı, kesirli sayıların tamsayı değere ancak yaklaşık olabildiklerini gösteriyor:

' int 4 bayt; değer: 715827882
float 4 bayt; değer: 715827904
long 8 bayt; değer: 3074457345618258602
double 8 bayt; değer: 3074457345618258432
'

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]