Я думаю, проблема в том, что вы делаете ввод в шестнадцатеричном формате, но это делает внутренние вычисления в десятичной системе и используя длину шестнадцатеричного ввода, чтобы определить, сколько десятичных цифр n руп должен быть представлен. Поэтому, когда вы вводите «0,2» (шестнадцатеричный), он переводит его на ближайшее десятичное число с 1 цифрой, 0,1 (раз). Умножьте это на 5, и вы получите 0.5 (dec) = 0.8 (hex).
Вы можете видеть это, заставляя его использовать более десятичные цифры. Если вы делаете «0.20 * 5», он преобразует 0.20 (hex) в 0.12 (dec), умножая это на 12, дает 0.60 (dec), который округляется до 0.99 (hex) для вывода. Если вы делаете «0.200 * 5», он переводит 0.200 (hex) в 0.125 (dec), умножая на 5, дает 0.625 (dec), который переводится в 0.A00 (hex), что является «правильным» результатом.
Вы умны. Это правильный ответ. – Ben
И да, похоже, что все вычисления в bc находятся в десятичной форме (в то время как ввод и вывод в шестнадцатеричном формате основаны на моей ibase и obase) – Ben