2013-08-29 3 views

ответ

2

Я думаю, проблема в том, что вы делаете ввод в шестнадцатеричном формате, но это делает внутренние вычисления в десятичной системе и используя длину шестнадцатеричного ввода, чтобы определить, сколько десятичных цифр 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), что является «правильным» результатом.

+0

Вы умны. Это правильный ответ. – Ben

+0

И да, похоже, что все вычисления в bc находятся в десятичной форме (в то время как ввод и вывод в шестнадцатеричном формате основаны на моей ibase и obase) – Ben

0

0,2 (десятичное) -> 0,1 (гекс)

0,5 (десятичное) -> 0,8 (гекс)

так, что, я считаю, что происходит это:

шестнадцатеричный ввод (0.1 * 5), который будет выводиться как 0,5 в десятичном значении (основание 10), выводится как (0,8) в шестнадцатеричном (основание 16)

Смежные вопросы