2010-12-05 3 views
0

巨大(5kビット程度)の数字の上に丸められた立方根を見つける必要があります。 どうすればいいですか?大きな数字の立方根を見つける

+0

http://www.gnu.org/software/bc/?または、特定の言語でこれを行う必要がある場合は、どの言語ですか?特定の時間/空間の制約はありますか? –

+0

私はbcを試しましたが、それは非整数(1/3)の指数のようなものではありません – Dani

答えて

0

ここにはstraightforward iterative algorithmがあります。

特殊なケースは、おなじみの 平方根アルゴリズムである:彼らはspecial case of square rootsを呼び出すのポイントを作ることに注意してください。設定することで、N = 2は、ステップ2 における反復ルールは、同じ技術が根をキューブに適用することができる平方根反復ルール

なる:N = 3に設定し、所望のprecisionを達成するまで反復。

コメントの仕様の場合、「最も近い整数と正確に切り上げる必要があります」という場合、整数または合理的な立方根を持つ数値に対してのみ可能です。つまり、引用されたアルゴリズムを使用して、この反復の結果と次の結果の差が0.5未満になるまで反復することによって、この精度のレベルへの答えを見つけることができます。これは、今後の反復がその近似から遠く離れていないことを保証するのに十分近いものです。

これは数値解析クラスの練習ですか?もしそうなら、私はこれがまさにこのような疑問を提起したのではないかと推測しています。講師は、あなたが一般的なルールを特定の問題に適用することを望みます。

+0

私は精度が必要ではありません...私が言ったように、キューブの根を切り上げる必要があります – Dani

+0

@Dani、 "切り上げ"精度。 –

+1

精度がない場合は、最も近い整数に切り上げて正確になる必要があります – Dani

5

GNU BCはあなたのための罰金である場合、これが行う可能性があります:

http://phodd.net/gnu-bc/bcfaq.html#bccbrt

EDIT:

それは本質的に沸く:

$ bc -l 
define cbrt(x) { return e(l(x)/3) } 

あなたは増やす必要があります必要な精度を得るためにスケール変数を使用します。

$ bc -l 
bc 1.06.95 
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. 
This is free software with ABSOLUTELY NO WARRANTY. 
For details type `warranty'. 

define cbrt(x) { return e(l(x)/3) } 

cbrt(10000000000000000000000000000000000000000000000000000000000000000000)^3 
9999999999999999999845725361475980907263179272258247094885777761435.\ 
89049462743995306310 

scale=1000 

cbrt(10000000000000000000000000000000000000000000000000000000000000000000)^3 
9999999999999999999999999999999999999999999999999999999999999999999.\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999978254573198390239858\ 
069738839057154871628814670160708326688382280410 

スケール変数を増やすことなく(私のシステムではデフォルトで20に設定されています)、結果には必要な精度がありません。

+1

これはgnuだけでなくbcでも有効です。 –

関連する問題