2017-03-10 6 views
0

ハスケルで浮動小数点のn番目のルートを計算する方法があるかどうかわかりません。私はアルゴリズムを書くことができますが、私がする前に、私が見つけていないモジュールや缶詰めの関数があるかどうかを知りたいのです。ハスケル:浮動小数点のn番目のルートを見つける

https://hackage.haskell.org/package/dimensional-1.0.1.0/docs/Numeric-Units-Dimensional.html

nroot機能に言及しているが、それへのアクセスを取得する方法を言うことができない:私は、このページを発見しました。それは標準ライブラリに入っていません(私がnroot(3,27)を実行しようとすると、関数が有効範​​囲にないことがわかります)。 import Numeric.Units.Dimensionalと入力してNumeric.Units.Dimensionalをインポートしようとしましたが、モジュールが見つかりませんでした。私はこのようなモジュールを読み込む方法を誤解しているかもしれません。

+0

'nroot n x = x **(1/n)'です。あるいは、あなたが好むなら、 'nroot = flip(**)。レシピ。 – Alec

+0

あなたはいつも逆数で指数を使うことができます - 'sqrt x = x ^(1/2)' – epsilonhalbe

+0

あなたは私を打つ@Alec - 答えとして書く? – epsilonhalbe

答えて

2

n根の定義は、実際には逆数nのべき乗であることに注意してください。そのことを念頭に置いて、おそらくあなたはおそらく、27 ** (1/3)または27 ** (recip 3)と書いてあります。本当にしたい場合:

nroot :: (Integral a, Floating b) => a -> b -> b 
n `nroot` x = n `nroot` x = x ** (1/fromIntegral n) 

これは、three exponentiation operators that existに注意してください! **のみがあなたのために働きます。


私はおそらくnroot :: (KnownTypeInt n, Floating a) => Proxy n -> Quantity d a -> Quantity (Root d n) aはあなたが望むものを確かにないであることを追加する必要があります。特にあなたが取っているルートは、コンパイル時の型レベル番号でなければならないことに注意してください。

関連する問題