Wie der Titel sagt ist mein Problem schwer zu beschreiben.
edit: Ich habe jetzt von anderer Stelle Hilfe bekommen und wie sich herausgestellt hat ist das ganze noch viel komplizierter. In lua sehen die konverter funktionen so aus:
Spoiler anzeigen
Alles anzeigen
Ich habe eine Ausgangszahl(1065353216) diese entspricht 1.
Wenn ich nun 8388608 addiere erhalte ich die doppelte Zahl.
z.b:
1065353216+1*8388608=1073741824 entspricht 2
1065353216+2*8388608=1082130432 entspricht 4
usw.
Es verhält sich immer so, also nicht nur bei der Vordopplung ausgehend von 1.
z.b: 1077936128 entspricht 3
1077936128+1*8388608=1086324736 entspricht 6
Ich suche nun eine Möglichkeit nur aus der ersten Zahl(1065353216) und der "Additionszahl"(8388608 ) jeden beliebigen Wert zu berechnen. (z.b den Wert der 10 entspricht)
edit: Ich habe jetzt von anderer Stelle Hilfe bekommen und wie sich herausgestellt hat ist das ganze noch viel komplizierter. In lua sehen die konverter funktionen so aus:
Brainfuck-Quellcode
- --------------------------------------------
- -- Funcs to Convert float to int and back --
- --------------------------------------------
- function qmod(a, b)
- return a - math.floor(a/b)*b
- end
- function Int2Float(num)
- if(num == 0) then
- return 0
- end
- local sign = 1
- if(num < 0) then
- num = 2147483648 + num
- sign = -1
- end
- local frac = qmod(num, 8388608)
- local headPart = (num-frac)/8388608
- local expNoSign = qmod(headPart, 256)
- local exp = expNoSign-127
- local fraction = 1
- local fp = 0.5
- local check = 4194304
- for i = 23, 0, -1 do
- if(frac - check) > 0 then
- fraction = fraction + fp
- frac = frac - check
- end
- check = check / 2
- fp = fp / 2
- end
- return fraction * math.pow(2, exp) * sign
- end
- function bitsInt(num)
- local t={}
- while num>0 do
- rest=qmod(num, 2)
- table.insert(t,1,rest)
- num=(num-rest)/2
- end
- table.remove(t, 1)
- return t
- end
- function bitsFrac(num, t)
- for i = 1, 48 do
- num = num * 2
- if(num >= 1) then
- table.insert(t, 1)
- num = num - 1
- else
- table.insert(t, 0)
- end
- if(num == 0) then
- return t
- end
- end
- return t
- end
- function Float2Int(fval)
- if(fval == 0) then
- return 0
- end
- local signed = false
- if(fval < 0) then
- signed = true
- fval = fval * -1
- end
- local outval = 0;
- local bits
- local exp = 0
- if fval >= 1 then
- local intPart = math.floor(fval)
- local fracPart = fval - intPart
- bits = bitsInt(intPart)
- exp = table.getn(bits)
- bitsFrac(fracPart, bits)
- else
- bits = {}
- bitsFrac(fval, bits)
- while(bits[1] == 0) do
- exp = exp - 1
- table.remove(bits, 1)
- end
- exp = exp - 1
- table.remove(bits, 1)
- end
- local bitVal = 4194304
- local start = 1
- for bpos = start, 23 do
- local bit = bits[bpos]
- if(not bit) then
- break;
- end
- if(bit == 1) then
- outval = outval + bitVal
- end
- bitVal = bitVal / 2
- end
- outval = outval + (exp+127)*8388608
- if(signed) then
- outval = outval - 2147483648
- end
- return outval;
- end
Wenn ich nun 8388608 addiere erhalte ich die doppelte Zahl.
z.b:
1065353216+1*8388608=1073741824 entspricht 2
1065353216+2*8388608=1082130432 entspricht 4
usw.
Es verhält sich immer so, also nicht nur bei der Vordopplung ausgehend von 1.
z.b: 1077936128 entspricht 3
1077936128+1*8388608=1086324736 entspricht 6
Ich suche nun eine Möglichkeit nur aus der ersten Zahl(1065353216) und der "Additionszahl"(8388608 ) jeden beliebigen Wert zu berechnen. (z.b den Wert der 10 entspricht)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von andre111 ()