( locsemege | 2017. 10. 19., cs – 22:04 )

Írtam már assembly-ben lebegőpontos aritmetikát, így azt mondom erre, hogy pontatlan a megfogalmazásod. A szám m*2k alakú, ahol 1<=abs(m)<2 a mantissza, k egész a karakterisztika. A nullát speciálisan, külön ábrázoljuk, mivel az abszolútérték első bitjét felesleges ábrázolni, oda az előjelet érdemes írni. Így viszont nem lenne nullánk.

Az int(x) egy viszonylag kellemetlen függvény. Ha elég nagy, akkor a mantissza teljes hosszában egészeket tárol. Ez akkor van, ha a karakterisztika nagyobb, vagy egyenlő, mint a mantissza hossza. Ha elég kicsi, ami azt jelnti, hogy a karakterisztika negatív, akkor az egész rész nulla, legalább is pozitív szám esetén.

A két eset között viszont az van, hogy a karakterisztikától függő maszkkal kell a mantisszát maszkolni, amelynek hatására eltűnik a tört rész. Nem is ez a baj amúgy, hanem az, hogy egy normális int(x) az értelmezési tartományon haladva minden olyan esetben ugrik 1-et, amikor egy újabb egészhez értünk. Az az int(), amit az awk használ, de helyesebb volna talán valami másnak nevezni, olyan, hogy általában egyet ugrik, amikor újabb egészhez érünk, kivéve nullánál, ahol nem ugrik, azaz -1-től 1-ig végig 0 lesz az értéke. Na, ez viszont szívás, ha nem számítasz rá.

Amúgy definíciós kérdés, nem nagy probléma, ha tud róla az ember, olvas doksit. A baj ott volt, hogy int() alatt én másra számítottam.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE