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. ]