Единственное, что я могу вам предложить со своей поверхностной точки зрения, это попробовать начать со школьных свойств логарифма. Если аргумент типа 0.001, т.е. вблизи разрыва логарифма в минус бесконечность, то вероятнее всего тут стоит применить
ln(x) = - ln(1/x)
Т.е. перевести аргумент из малых значений в большие. Потом расписать х как а * 2^n, где степень n выбрать такой, чтобы а попало в интервал от 1 до 2 или около того. А потом сделать так:
ln(x) = ln(a * 2^n) = ln(a) + ln(2^n) = ln(a) + n * ln(2);
Константу ln(2) скорее всего лучще будет посчитать отдельно и жестко вбить прямо в код, а для нахождения ln(a), где а слабо отличается от 1 разложить в ряд, только раскладывать не ln(1 + x), а пожалуй обратный гиперболический тангенс arth(x) - ряд для него сходится быстрее