WinMUGEN's Exponentiation Operator Bug
Instead of computing 2**n correctly, WinMUGEN misinterprets the binary representation of n by reading its least significant bits in reverse order. This causes it to apply the exponentiation as if the bit order of the exponent were flipped, resulting in values being misrouted to unexpected positions. This was fixed on MUGEN 1.0 RC2 onwards. Let's see their results with this table.
| Expression | Expected Output | MUGEN Output | Status |
|---|---|---|---|
2 ** 0 |
0b000000000000000000000000000000011 |
0b000000000000000000000000000000011 |
✔ Match |
2 ** 1 |
0b000000000000000000000000000000102 |
0b000000000000000000000000000000102 |
✔ Match |
2 ** 2 |
0b000000000000000000000000000001004 |
0b000000000000000000000000000001004 |
✔ Match |
2 ** 3 |
0b000000000000000000000000000010008 |
0b000000000000000000000000000010008 |
✔ Match |
2 ** 4 |
0b0000000000000000000000000001000016 |
0b0000000000000000000000000001000016 |
✔ Match |
2 ** 5 |
0b0000000000000000000000000010000032 |
0b0000000000000000000000000100000064 |
✘ Mismatch |
2 ** 6 |
0b0000000000000000000000000100000064 |
0b0000000000000000000000000010000032 |
✘ Mismatch |
2 ** 7 |
0b00000000000000000000000010000000128 |
0b00000000000000000000000010000000128 |
✔ Match |
2 ** 8 |
0b00000000000000000000000100000000256 |
0b00000000000000000000000100000000256 |
✔ Match |
2 ** 9 |
0b00000000000000000000001000000000512 |
0b000000000000000000010000000000004096 |
✘ Mismatch |
2 ** 10 |
0b000000000000000000000100000000001024 |
0b000000000000000000000100000000001024 |
✔ Match |
2 ** 11 |
0b000000000000000000001000000000002048 |
0b0000000000000000010000000000000016384 |
✘ Mismatch |
2 ** 12 |
0b000000000000000000010000000000004096 |
0b00000000000000000000001000000000512 |
✘ Mismatch |
2 ** 13 |
0b000000000000000000100000000000008192 |
0b000000000000000000100000000000008192 |
✔ Match |
2 ** 14 |
0b0000000000000000010000000000000016384 |
0b000000000000000000001000000000002048 |
✘ Mismatch |
2 ** 15 |
0b0000000000000000100000000000000032768 |
0b0000000000000000100000000000000032768 |
✔ Match |
2 ** 16 |
0b0000000000000001000000000000000065536 |
0b0000000000000001000000000000000065536 |
✔ Match |
2 ** 17 |
0b00000000000000100000000000000000131072 |
0b0000000100000000000000000000000016777216 |
✘ Mismatch |
2 ** 18 |
0b00000000000001000000000000000000262144 |
0b000000000001000000000000000000001048576 |
✘ Mismatch |
2 ** 19 |
0b00000000000010000000000000000000524288 |
0b00010000000000000000000000000000268435456 |
✘ Mismatch |
2 ** 20 |
0b000000000001000000000000000000001048576 |
0b00000000000001000000000000000000262144 |
✘ Mismatch |
2 ** 21 |
0b000000000010000000000000000000002097152 |
0b0000010000000000000000000000000067108864 |
✘ Mismatch |
2 ** 22 |
0b000000000100000000000000000000004194304 |
0b000000000100000000000000000000004194304 |
✔ Match |
2 ** 23 |
0b000000001000000000000000000000008388608 |
0b010000000000000000000000000000001073741824 |
✘ Mismatch |
2 ** 24 |
0b0000000100000000000000000000000016777216 |
0b00000000000000100000000000000000131072 |
✘ Mismatch |
2 ** 25 |
0b0000001000000000000000000000000033554432 |
0b0000001000000000000000000000000033554432 |
✔ Match |
2 ** 26 |
0b0000010000000000000000000000000067108864 |
0b000000000010000000000000000000002097152 |
✘ Mismatch |
2 ** 27 |
0b00001000000000000000000000000000134217728 |
0b00100000000000000000000000000000536870912 |
✘ Mismatch |
2 ** 28 |
0b00010000000000000000000000000000268435456 |
0b00000000000010000000000000000000524288 |
✘ Mismatch |
2 ** 29 |
0b00100000000000000000000000000000536870912 |
0b00001000000000000000000000000000134217728 |
✘ Mismatch |
2 ** 30 |
0b010000000000000000000000000000001073741824 |
0b000000001000000000000000000000008388608 |
✘ Mismatch |
2 ** 31 |
0b10000000000000000000000000000000-2147483648 |
0b10000000000000000000000000000000-2147483648 |
✔ Match |