2012-05-09 10 views
2

GMPで非常に大きな数の平方根の天井を探したいと思います。 Cでは、ceil(sqrt(n))です。GMP天井関数

整数のGMP平方根は結果を切り捨てるため、10の平方根は3と報告されます。浮動小数点平方根は期待通りに機能しますが、次に大きな整数を取る必要があります。 mpf_get_dはゼロに向かってラウンドしますが、そうでなければ私がしたいことをします。どのようにして大きな数字の平方根の天井を得ることができますか?

答えて

1

mpf_ceil()を使用しない特定の理由はありますか?私が何かを逃していない限り、私には論理的なステップのように聞こえる。

編集:あなたの質問を読み返した後、整数を浮動小数点で扱う理由は何ですか?

+0

ああ私はそれを見ませんでした。私は浮動小数点演算と浮動小数点変換セクションを調べていました。それは雑多なセクションにあった。私は "GMP天井浮動関数"のさまざまな組み合わせを検索せずに成功しました。 –

+0

私は最後に整数が必要です。できるだけ早く1つに戻したいと思います。平方根は、整数でなければならない計算の唯一の部分です。 –

+0

浮動小数点への変換は間違いなく機能しますが、十分な精度で行い、結果を整数に戻す前に正しく丸める必要があります。その場合、+/- 1での私の答えは、おそらくより簡単で簡単に確認することができます。 – Mysticial

7

はここで間に合わせと-トリックです:trunc_sqrt(n)は、現在使用しているGMPの整数平方根関数である

ceil(sqrt(n)) = trunc_sqrt(n - 1) + 1 

これはすべての整数に対して有効です。n > 0

関連する問題