私はCで次のものを持っています:
long long int a;
long long int b;
long long int c;
long long int d=a*b/c;
ただし、「d」を2倍にします。long long intを乗算、除算し、小数点以下3桁までの精度を維持しながら、答えとしてdoubleを取得する方法はありますか?
ありがとう
の1つを(少なくとも)キャストlong long int
しますdouble
double d = a * (double)b / c;
これを行っても数値がオーバーフローしない場合は、すべてを1000倍にすることができます。また、物で割る前に、必ず物を掛けることを確認してください。doubleに変換できますが、情報が失われる可能性があります。
部分式を含むC式は通常、それらが現れるコンテキストに関係なく評価さa*b/c
れるため、部分式は整数演算を使用して評価されます。これは、除算の切り捨てを意味します。
整数値に対して浮動小数点演算を実行する場合は、それらを浮動小数点型に変換する必要があります。これはあなたの場合にうまくいくはずです:
long long int a;
long long int b;
long long int c;
/* Assign values to a, b, and c (!) */
double d = (double)a * b / c;
乗算と除算の両方を型で実行するには、最初のオペランドだけを変換するだけで十分であることに注意してくださいdouble
。
double d = double(a) * double(b) / double(c);
浮動小数点の結果を取得すると言います。(実際には、すべてをプロモートするために必要な要素は1つdouble
だけですが、明示的にしないでください。)倍精度浮動小数点の通常の精度が得られます(つまり、「精度レベル」を選択できません)。
浮動小数点演算が必要ですか(つまり、問題に複数のスケールが必要ですか)。おそらく、固定小数点演算の方が状況に適しています。