Пишем 10 степеней как компактные константы
Я читаю недавно выпущенныйЯзык программирования Goи до сих пор это была радость (с Брайаном Керниганом, являющимся одним из авторов, я все равно не ожидал бы ничего, кроме превосходства).
Я встретил следующее упражнение в главе 3:
Упражнение 3.13 Написатьconst
объявления для KB, MB, через YB так компактно, как вы можете.
(НОТА: в этом контексте KB, MB и т. д. обозначают степени 1000)
Этому предшествует раздел, гдеiota
введен в качестве полезного механизма генератора констант; в частности, предыдущий абзац показывает хороший и компактный способ определения степеней 1024 как констант:
const (
_ = 1 << (10 * iota)
KiB
MiB
GiB
TiB
PiB
EiB
ZiB
YiB
)
Авторы также упоминают это в отношении полномочий 10:
iota
Механизм имеет свои пределы. Например, невозможно сгенерировать более знакомые степени 1000 (КБ, МБ и т. Д.), Потому что нет оператора возведения в степень.
Я борюсь с этим упражнением, потому что похоже, что ожидаемое решение является чем-то более сложным, чем простое изложение степеней 1000 вручную (тем более, что оно появляется послеiota
вводится). Я чувствую, что есть какой-то умный способ сделать это, который используетiota
в тонком смысле в сочетании с чем-то еще.
Я думал о том, чтобы найти систематический способ вычитать «избыточное» количество из каждой из 1024 степеней, чтобы получить 1000, но это привело меня в никуда. Затем я посмотрел на двоичные представления, чтобы попытаться вывести общую схему, в которойiota
может быть полезным, но опять же, я ничего не получил.
Я действительно не могу понять, как можно генерировать силы 1000 из одного возрастающего значения (iota
) без оператора возведения в степень.
Есть идеи?