Хорошо, у меня есть две функции, первая из которых выглядит так:
let dlth x = float (x.ToString().Length)
который принимает число с плавающей запятой и возвращает количество цифр, эта часть работает нормально. Вторая функция выглядит так:
let droot x = ((x ** (1./(dlth x))) % 1.)
который берет число с плавающей запятой и увеличивает его до степени, равной 1.0 / (количество цифр), затем принимает результат и выполняет модуль 1.0. Который должен быть равен нулю для целого числа.
поэтому для droot 36 требуется (36.0 ** (1.0 / 2.0)), что составляет 6.0, тогда 6.0 mod 1.0 равно 0.0;
Теперь это отлично работает вплоть до того момента, когда я пробую число 81.0. (и все числа выше 81, которые должны работать), который по какой-то причине возвращает 1.0, отбрасывая мое сопоставление с образцом. Кто-нибудь может сказать мне, почему это происходит?
PostScript: это часть решения Project Euler. Если вы знаете, какая проблема, пожалуйста, НЕ публиковать решение Project Euler. Мне просто нужна помощь, чтобы понять, почему модуль возвращает забавные результаты.