Zahlenvordopplung und Umrechnung(Schwer zu beschreiben)

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zahlenvordopplung und Umrechnung(Schwer zu beschreiben)

    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

    Brainfuck-Quellcode

    1. --------------------------------------------
    2. -- Funcs to Convert float to int and back --
    3. --------------------------------------------
    4. function qmod(a, b)
    5. return a - math.floor(a/b)*b
    6. end
    7. function Int2Float(num)
    8. if(num == 0) then
    9. return 0
    10. end
    11. local sign = 1
    12. if(num < 0) then
    13. num = 2147483648 + num
    14. sign = -1
    15. end
    16. local frac = qmod(num, 8388608)
    17. local headPart = (num-frac)/8388608
    18. local expNoSign = qmod(headPart, 256)
    19. local exp = expNoSign-127
    20. local fraction = 1
    21. local fp = 0.5
    22. local check = 4194304
    23. for i = 23, 0, -1 do
    24. if(frac - check) > 0 then
    25. fraction = fraction + fp
    26. frac = frac - check
    27. end
    28. check = check / 2
    29. fp = fp / 2
    30. end
    31. return fraction * math.pow(2, exp) * sign
    32. end
    33. function bitsInt(num)
    34. local t={}
    35. while num>0 do
    36. rest=qmod(num, 2)
    37. table.insert(t,1,rest)
    38. num=(num-rest)/2
    39. end
    40. table.remove(t, 1)
    41. return t
    42. end
    43. function bitsFrac(num, t)
    44. for i = 1, 48 do
    45. num = num * 2
    46. if(num >= 1) then
    47. table.insert(t, 1)
    48. num = num - 1
    49. else
    50. table.insert(t, 0)
    51. end
    52. if(num == 0) then
    53. return t
    54. end
    55. end
    56. return t
    57. end
    58. function Float2Int(fval)
    59. if(fval == 0) then
    60. return 0
    61. end
    62. local signed = false
    63. if(fval < 0) then
    64. signed = true
    65. fval = fval * -1
    66. end
    67. local outval = 0;
    68. local bits
    69. local exp = 0
    70. if fval >= 1 then
    71. local intPart = math.floor(fval)
    72. local fracPart = fval - intPart
    73. bits = bitsInt(intPart)
    74. exp = table.getn(bits)
    75. bitsFrac(fracPart, bits)
    76. else
    77. bits = {}
    78. bitsFrac(fval, bits)
    79. while(bits[1] == 0) do
    80. exp = exp - 1
    81. table.remove(bits, 1)
    82. end
    83. exp = exp - 1
    84. table.remove(bits, 1)
    85. end
    86. local bitVal = 4194304
    87. local start = 1
    88. for bpos = start, 23 do
    89. local bit = bits[bpos]
    90. if(not bit) then
    91. break;
    92. end
    93. if(bit == 1) then
    94. outval = outval + bitVal
    95. end
    96. bitVal = bitVal / 2
    97. end
    98. outval = outval + (exp+127)*8388608
    99. if(signed) then
    100. outval = outval - 2147483648
    101. end
    102. return outval;
    103. end
    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)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von andre111 ()

  • Du kannst ein float/"double" im GM mit

    GML-Quellcode

    1. helplzahl = floor(zahl);
    2. zahl = helpzahl;
    3. //einfacher gehts im GM nicht :S (soweit ich weiss!)

    nach dem Kommapunkt abschneiden.
    Mit

    GML-Quellcode

    1. helpzahl = frac(zahl);
    2. zahl = helpzahl;

    bekommst du nur was hinter dem Dezimalpunkt steht.
    Und hochrechen:

    GML-Quellcode

    1. power(zahl1,zahl2);


    Deine eigenen Funktonen definierst du einfach als Script :) qmod etc


    Halt mal; du bist gml-Experte - das ist eine sehr simple Lösung... hab ich iwas übersehen? Ich will keine falschen/schlechten Ratschläge geben.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)