Как стать автором
Обновить

Комментарии 18

Не уверен, что это кому-нибудь подойдёт, потому что уже есть такие стандартные значения как кило-, мега, гига итд. Не совсем понял, почему вам не подходит цифра с фактором в виде степени? Вроде бщепринятая вещь. И сама по себе задача не совсем понятна, где такое будет надо. Но сама идея неплохая.

100000 => 1e5

  • на мой взгляд общепринятый метод намного проще и даже более краток

Есть еще один принятый (во всяком случае встречал его в ММО): 100 000 = 100к, 1 000 000 = 1кк и т.д. И это намного более понятно, чем 1.23aBeT

есть офф сокращения: k, M, G(B), T
А вот дальше уже кто во что горазд

Подозреваю, что одной из причин является то, что кило- более употребительная, универсальная и прижившаяся, а вот дальше начинается разнобой гига-, миллиард, биллион...

Ничего ж себе вы кода написали...

Вообще задача сводится к тому, чтобы взять экспоненту из экспоненциальной записи, поделить на три, потом записать полученное число в 26-ричной системе счисления, где в качестве цифр используются буквы. Таким образом вы получите свои буквы в суффиксе.

Собственно, вы это и сделали, но в процессе изобрели свою собственную терминологию, написали кучу кода и ограничились всего тремя цифрами.

На пайтоне это может выглядеть приблизительно вот так: https://ideone.com/WLhvxq

Что-то я не понял, а как в вашей нотации решить собссно вашу же проблему. Сокращать степени десятки можно и просто через степень, без всяких научных нотаций и придумок хитрых.

Используя вашу буквенную схему запишите мне число, ну скажем 838295772233444310003.

Ну, записать-то записали, а как эти числа между собой сравнивать? Вот когда у меня два числа 838e+18 и 838е+16, мне легко быстро понять, которое их них больше и насколько.

А вот в записи 838F и 838H как-то с ходу не разберемся. Можно предположить, что я хорошо помню порядок букв в алфавите, и могу с ходу распознать кто больше/меньше, но как понять насколько порядков? Это ж надо вспомнить на каком месте стоят буквы F и H, а потом вычесть номера этих позиций. Очень-очень неудобно) А когда начнутся двухбуквенные обозначеничя, то всё - приехали.

А может, не надо изобретать велосипед?
image

Что то у вас там совсем не сбалансировано, если для количества монет необходима форма записи с экспонентой.

НЛО прилетело и опубликовало эту надпись здесь

А ещё в игровом сообществе (особенно в среде ММОРПГ) есть запись, где суффикс "К" означает умножение на тысячу, и их можно добавлять неограниченое количество раз (например 1к = 10000, 1кк = 1 000 000, 1ккк = 1 000 000 000, ну и тд). Если уже принимать какую-то систему множителей денежных знаков в игре, то скорее такую, знакомую игрокам...

Можно — не значит нужно. Больше трёх "ккк" я ни разу не видел на практике, да и выглядит монструозно.

Вы явно не играли ни в одну игру из жанра кликеров. Там это всё давным давно решено наиболее понятным и интуитивным способом (см. Приставки СИ), с помощью всем известных букв K(ило), M(ега), G(ига), T(ера), P(ета) и так далее.

Для вопрошающих "Зачем такое нужно?" — ответ дан в самом начале статьи. Речь идёт об игре жанра Idle/Incremental. Для таких игр экспоненциальный/сверхэкспоненциальный/гиперэкспоненциальный рост чисел — обычное дело.


Согласен, что изобретать велосипед в данном случае не стоит. Стандартно, для записи чисел в таких случаях применяется научная E-нотация.


Основная сложность при работе с огромными числами — это операции с ними. В инкрементальных играх скорость обработки намного важнее итогового результата. Опять-таки, не стоит изобретать велосипед, лучше посмотреть в сторону готовых библиотек.

Ну можно ж было погуглить сначала, нашли бы страничку с примерами нотаций из Antimatter Dimensions, очень популярной среди idle-игр. Конечно, большинство из них шуточные, но ваша задача там решена.

<занудство>

Ну как минимум если у вас кликер и числа обновляются чаще раза в секунду - уже стоило задуматься на реализации без ToString, чтобы избежать лишних вызовов GC.

Ну и вместо BigInteger, раз все равно сокращаете, можно было бы использовать double. Если нужно реально больше 300 цифр в числе - можно придумать свой формат, где будет double + степень. При обновлении все что меньше определенной точности итак не имеет значения. BigInteger на больших числах может быть слишком медленным и тоже утечки памяти провоцировать.

</занудство>

А так вообще прикольно.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации