3 ms·
Integer variables were written I%. I%=I%+1 was certainly faster than I=I+1, but I am not sure if that extended to FOR loops.
by bonzini 5y ago
Integer variables were written I%. I%=I%+1 was certainly faster than I=I+1, but I am not sure if that extended to FOR loops.
- masswerk 5y agoThe implementation issue with integers in Commodore BASIC 2 was that they were still stored in a 5 byte format, while actually using just the first two bytes. Meaning, unlike with other implementations of MS BASIC, they occupied 7 bytes in memory (with two leading bytes for the identifier), just like floating point variables, and there was no improvement on memory usage with integers.
- classichasclass 5y agoOh, you'd be surprised. Run this: 10 TI$="000000":J=.:FORI=0TO900:J=J+1:NEXT:PRINTTI 20 TI$="000000":J%=.:FORI=0TO900:J%=J%+1:NEXT:PRINTTI I get, on VICE in PAL mode, 212 jiffies and 256 jiffies respectively. The reason for this nonsense is that Commodore BASIC does the math in floating point, and converts it to integer after the fact. You can speed this up with 20 TI$="000000":J%=.:K%=1:FORI=0TO900:J%=J%+K%:NEXT:PRINTTI which gives me 244 jiffies, but still slower, because even though K% is now already an integer and it costs "less" since it is now in a variable instead of being converted from BASIC text, it still requires a roundtrip to the floating point accumulator. Bottom line: always benchmark.
- bonzini 5y agoCool! I did remember benchmarking it, but it's been... a few years :)