Пишем 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) без оператора возведения в степень.

Есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос