[ Impressum ]

Lua

www.Rozek.de > Lua
Diese Seite enthält noch ein paar Beiträge aus meiner Lua[1]-Zeit, die entweder wegen der öffentlichen Verlinkung erhalten bleiben sollten (wie die Lua-Logos) bzw. von ihrer Funktionsweise her auch heute noch interessant sind (wie die Bestimmung des Integer-Wertebereiches, die in dieser Form z.B. auch für JavaScript relevant ist)

Sie finden diese (und weitere) Inhalte auch auf meiner Seite im Lua-Users Wiki.

Lua-Logo als PNG-Grafik

Anfangs war das Lua-Logo nur als EPS- oder BMP-Datei verfügbar - deshalb habe ich es irgendwann einfach einmal in eine PNG-Grafik mit Alpha-Kanal umgewandelt:


Integer-Wertebereich für Zahlen im Format IEEE 754

Ähnlich wie JavaScript unterscheidet auch Lua (üblicherweise) nicht zwischen Ganz- und Fließkomma-Zahlen - Zahlen werden stattdessen stets im Format IEEE 754 Double-Precision (64 Bit) gespeichert. Häufig ist dies jedoch überhaupt nicht tragisch, da das Format ganze Zahlen in einem recht weiten Bereich verlustfrei speichern kann.

Die folgende Lua-Funktion berechnet diesen für Ganzzahlen nutzbaren Bereich (siehe auch http://lua-users.org/wiki/IntegerDomain):

--**** should be compatible with 5.xx ****
function intlimit()
local floor = math.floor

--**** get highest power of 2 which Lua can still handle as integer ****
local step = 2
while true do
local nextstep = step*2
if (floor(nextstep) == nextstep) and (nextstep-1 ~= nextstep) then
step = nextstep
else
break
end
end

--**** now get the highest number which Lua can still handle as integer ****
local limit,step = step,step/2
while step > 0 do
local nextlimit = limit+step
if (floor(nextlimit) == nextlimit) and (nextlimit-1 ~= nextlimit) then
limit = nextlimit
end
step = floor(step/2)
end
return limit
end

Diese Funktion kann nun in ein kleines Programm eingebettet und getestet werden:

local limit = intlimit()

print()
print("IntegerDomain - what is the largest supported integer number?")
print()

--**** do not rely on Lua to print "limit" properly by itself! ****
--local printablelimit = string.format("%d", limit) -- fails under Lua!
local printablelimit = string.format("%.16e", limit)

print("supported integer range is: -" ..
printablelimit .. "...+" .. printablelimit)

Die Ausgabe dieses Programmes sieht wie folgt aus:

IntegerDomain - what is the largest supported integer number?

supported integer range is: -9.0071992547409940e+15...+9.0071992547409940e+15

Der nutzbare Bereich beträgt somit -9007199254740994…+9007199254740994 (jeweils inklusive), was für die meisten Anwendungen ausreichen dürfte.

Literaturhinweise

[1]
(Lua Team)
The Programming Language Lua
Die genannte Adresse ist der Ausgangspunkt für Recherchen zum Thema Lua: von hier aus gelangt man zu Distributionen, Dokumentationen, zusätzlichen Bibliotheken und kann zu anderen Lua-Benutzern Kontakt aufnehmen