1

long doubleI get18/19 = 0.947368421052631578...を使用すると、循環947368421052631578小数になります。doubleI getを使用する0.947368421052631526...ただし、前者は正しいです。なぜそのような間違った結果ですか?

手伝ってくれてありがとう。

4

3 に答える 3

10

Adoubleは通常、16(±1)の10進数を提供します。あなたの例はこれを示しています:

     4   8  12  16
     v   v   v   v
0.947368421052631578 long double
0.947368421052631526 double

答えは16桁に同意します。これが期待されるべきことです。long doubleまた、C標準では、aが。よりも精度が高いという保証はありませんdouble

于 2012-06-19T22:08:32.843 に答える
9

すべての10進数を有限量のビットで表現しようとしています。浮動小数点で正確に表現できないものもあります。フロートで正確な答えを期待することが最初の問題です。すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを見てください

これがいくつかの講義ノートからの要約です:

前述のように、実数を格納するためのビット数は有限であるため、コンピューターは実数を正確に表すことができません。したがって、1/3、2の平方根、PIなど、桁数が無限大の数値を完全に表すことはできません。また、実数の符号化の仕方から、有限の桁数でも正確に表現することはできません。

于 2012-06-19T22:06:22.433 に答える
6

通常IEEE754doubleで実装されるAは、 10進数の15〜17桁の精度になります。コンパイラに表示させることができたとしても、それを超えたものは信頼できません。

于 2012-06-19T22:07:58.897 に答える