0

整数をdouble値で除算しようとしていますが、精度が低下していると思います。

#include <cmath>
#include <cstdio>
int main()
{
    double t=5465/54.0;
    double t1=(double)5465/(double)(t);
    double t3 = 5465.0/101.203;
    printf("%lf %lf %lf\n",t,t1,t3);
    return 0;
}

上記のコードの場合、の値t3 = 54.0003は期待どおりですが、t154の場合、t3と同じ値を取得する代わりになります。どんな間違いをしているのかわからない

4

2 に答える 2

4

5465 / 54.0の値は101.203703704(小数点以下9桁まで)です。あなたのコードではこれを使用しています

 double t3 = 5465.0/101.203;

の結果を切り捨てる

 double t=5465/54.0;

101.203なんらかの理由で。したがって、切り捨ての結果として2つの異なる値を計算しています。基本的に、これら2つの計算は同じであると期待していますが

 5465.0/101.203 != 5465/101.203703704
于 2012-10-21T20:21:54.827 に答える
1

もちろん、結果は異なります。101.203703704の代わりに101.203を使用しました。

于 2012-10-21T20:22:08.900 に答える