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 |
0b00000000000000000000000000000001 1 |
0b00000000000000000000000000000001 1 |
✔ Match |
2 ** 1 |
0b00000000000000000000000000000010 2 |
0b00000000000000000000000000000010 2 |
✔ Match |
2 ** 2 |
0b00000000000000000000000000000100 4 |
0b00000000000000000000000000000100 4 |
✔ Match |
2 ** 3 |
0b00000000000000000000000000001000 8 |
0b00000000000000000000000000001000 8 |
✔ Match |
2 ** 4 |
0b00000000000000000000000000010000 16 |
0b00000000000000000000000000010000 16 |
✔ Match |
2 ** 5 |
0b00000000000000000000000000100000 32 |
0b00000000000000000000000001000000 64 |
✘ Mismatch |
2 ** 6 |
0b00000000000000000000000001000000 64 |
0b00000000000000000000000000100000 32 |
✘ Mismatch |
2 ** 7 |
0b00000000000000000000000010000000 128 |
0b00000000000000000000000010000000 128 |
✔ Match |
2 ** 8 |
0b00000000000000000000000100000000 256 |
0b00000000000000000000000100000000 256 |
✔ Match |
2 ** 9 |
0b00000000000000000000001000000000 512 |
0b00000000000000000001000000000000 4096 |
✘ Mismatch |
2 ** 10 |
0b00000000000000000000010000000000 1024 |
0b00000000000000000000010000000000 1024 |
✔ Match |
2 ** 11 |
0b00000000000000000000100000000000 2048 |
0b00000000000000000100000000000000 16384 |
✘ Mismatch |
2 ** 12 |
0b00000000000000000001000000000000 4096 |
0b00000000000000000000001000000000 512 |
✘ Mismatch |
2 ** 13 |
0b00000000000000000010000000000000 8192 |
0b00000000000000000010000000000000 8192 |
✔ Match |
2 ** 14 |
0b00000000000000000100000000000000 16384 |
0b00000000000000000000100000000000 2048 |
✘ Mismatch |
2 ** 15 |
0b00000000000000001000000000000000 32768 |
0b00000000000000001000000000000000 32768 |
✔ Match |
2 ** 16 |
0b00000000000000010000000000000000 65536 |
0b00000000000000010000000000000000 65536 |
✔ Match |
2 ** 17 |
0b00000000000000100000000000000000 131072 |
0b00000001000000000000000000000000 16777216 |
✘ Mismatch |
2 ** 18 |
0b00000000000001000000000000000000 262144 |
0b00000000000100000000000000000000 1048576 |
✘ Mismatch |
2 ** 19 |
0b00000000000010000000000000000000 524288 |
0b00010000000000000000000000000000 268435456 |
✘ Mismatch |
2 ** 20 |
0b00000000000100000000000000000000 1048576 |
0b00000000000001000000000000000000 262144 |
✘ Mismatch |
2 ** 21 |
0b00000000001000000000000000000000 2097152 |
0b00000100000000000000000000000000 67108864 |
✘ Mismatch |
2 ** 22 |
0b00000000010000000000000000000000 4194304 |
0b00000000010000000000000000000000 4194304 |
✔ Match |
2 ** 23 |
0b00000000100000000000000000000000 8388608 |
0b01000000000000000000000000000000 1073741824 |
✘ Mismatch |
2 ** 24 |
0b00000001000000000000000000000000 16777216 |
0b00000000000000100000000000000000 131072 |
✘ Mismatch |
2 ** 25 |
0b00000010000000000000000000000000 33554432 |
0b00000010000000000000000000000000 33554432 |
✔ Match |
2 ** 26 |
0b00000100000000000000000000000000 67108864 |
0b00000000001000000000000000000000 2097152 |
✘ Mismatch |
2 ** 27 |
0b00001000000000000000000000000000 134217728 |
0b00100000000000000000000000000000 536870912 |
✘ Mismatch |
2 ** 28 |
0b00010000000000000000000000000000 268435456 |
0b00000000000010000000000000000000 524288 |
✘ Mismatch |
2 ** 29 |
0b00100000000000000000000000000000 536870912 |
0b00001000000000000000000000000000 134217728 |
✘ Mismatch |
2 ** 30 |
0b01000000000000000000000000000000 1073741824 |
0b00000000100000000000000000000000 8388608 |
✘ Mismatch |
2 ** 31 |
0b10000000000000000000000000000000 -2147483648 |
0b10000000000000000000000000000000 -2147483648 |
✔ Match |