私はいくつかの簡単な操作(引き算、掛け算)を持っている大きな数字(整数)で。彼らはとても大きいので、私はそれらを変数long double
に保存しなければなりません。それは問題ありませんが、場合によっては乗算が精度を失います。倍精度:大きな数の乗算
例:
A = 84478098072866400.00
B = 419247971803584000000.00
A * B = 35417271278873496315650351919301394432.00
これは間違っていることは明らかです。乗算の結果は0のシーケンスで終了する必要があります。
これは、最も一般的なケースであるので、私は特にこの1(数字はゼロで終了した場合)、精度を維持する必要があります。
私の質問は、それを行う方法を、お願いしているのですか? long double
をより良く動作させる方法はありますか?または、格納された数値の精度を取得する方法はありますか?
ありがとうございます!
編集:私は任意の外部ライブラリを使用することはできません
。私はACMコンペのアーカイブの問題を解決しようとしています。これはその一部です。
私は失われた精度で罰金だろうが、私はそれを検出する必要があります。数字がlong double
より大きい場合(おそらく確実かもしれない)、それは長いシーケンスのゼロで終了する。
整数に対して操作を行う場合は、浮動小数点ではなく整数を使用します。 –
@Carlよく50桁以上の数値には変数がありません。またはそれは? – Gaim
いいえ、組み込み型をまったく使用しようとするべきではありません。 Googleの任意の精度。 [GMP](http://gmplib.org/)は良い選択です。 –