Интересным свойством логарифмов является то, что смена базы на самом деле довольно проста.
log_b (x) = log_a (x) / log_a (b)
Поэтому, если вы хотите получить log_16 (x)
, вы можете использовать Log Функция и изменение базы:
log_e (x) = log_16 (x) / log_16 (e)
log_16 (e) = approximately 0.36067
=> log_16 (x) = 0.36067 * log_e (x)
Так что в Go я думаю, что это будет:
li := Log(i) * 0.36067
Редактировать: Когда я писал ответ выше, я не понимал, что Log
не будет работать на Big Int.Читая Go Github , похоже, что это запрошенная функция в языке, которая еще не реализована из-за отсутствия достаточно быстрого решения.Из того, что я прочитал, похоже, что на данный момент лучшее решение, если вам нужно использовать Big Int, - это, вероятно, реализация серии Тейлора, которую, на мой взгляд, было бы нетривиально написать.Поток, с которым я связан, указывает, что одна или несколько таких реализаций могут существовать, но не обязательно являются вычислительно правильными.