わかりました、最初の関数は次のようになります。
let dlth x = float (x.ToString().Length)
これは float を取り、桁数を返します。その部分は正常に機能します。2 番目の関数は次のようになります。
let droot x = ((x ** (1./(dlth x))) % 1.)
これは float を取り、それを 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 のソリューションを投稿しないでください。モジュラスが面白い結果を返す理由を理解するのに助けが必要です