Poderes de escrita de 10 como constantes compactamente

Estou lendo o recentemente lançadoA linguagem de programação Go, e tem sido uma alegria até agora (com Brian Kernighan sendo um dos autores, eu não esperaria nada além de excelência).

Eu me deparei com o seguinte exercício no capítulo 3:

Exercício 3.13 Escrevaconst declarações para KB, MB e YB da forma mais compacta possível.

(NOTA: neste contexto, KB, MB, etc., indicam poderes de 1000)

Isso é precedido por uma seção em queiota é introduzido como um mecanismo gerador de constantes útil; em particular, o parágrafo anterior mostra uma maneira agradável e compacta de definir os poderes de 1024 como constantes:

const (
    _ = 1 << (10 * iota)
    KiB
    MiB
    GiB
    TiB
    PiB
    EiB
    ZiB
    YiB
)

Os autores mencionam ainda isso em relação aos poderes de 10:

oiota mecanismo tem seus limites. Por exemplo, não é possível gerar os poderes mais familiares de 1000 (KB, MB e muito mais) porque não há operador de exponenciação.

Estou lutando com este exercício porque parece que a solução esperada é algo um pouco mais elaborada do que simplesmente explicar os poderes de 1000 manualmente (especialmente porque aparece depoisiota é introduzido). Eu sinto que há uma maneira inteligente de fazer isso que usaiota de uma maneira sutil combinada com outra coisa.

Pensei em encontrar uma maneira sistemática de subtrair o valor "excedente" de cada um dos poderes de 1024 para obter os poderes de 1000, mas isso me levou a lugar nenhum. Então olhei para as representações binárias para tentar inferir um padrão geral em queiota poderia ser útil, mas, novamente, não recebi nada.

Realmente não consigo ver como se geraria poderes de 1000 a partir de um único valor incremental (iota) sem um operador de exponenciação.

Alguma ideia?

questionAnswers(2)

yourAnswerToTheQuestion