Хорошо, у меня есть две функции, первая из которых выглядит так:
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. Мне просто нужна помощь, чтобы выяснить, почему модуль возвращает забавные результаты