数値をdoubleにstatic_cast-ingするのはなぜですか?
-
29-10-2019 - |
質問
私が作業しているコードでこれに遭遇しました:
double part2 = static_cast<double>(2) * somthing1
* ( static_cast<double>(1) + something2 )
+ ( static_cast<double>(1) / static_cast<double>(2) ) * something3
+ ( static_cast<double>(1) / static_cast<double>(2) ) * pow ( something4, 3 );
(ザ- something
sは double
s。)
I 容疑者 やってのトラブルを通過するための本当に良い理由があること
static_cast<double>(1)
そして、そのようなものですが、私ははるかに少ないタイピングで得ることができるようです。
私は何を理解していないのですか?
事前に感謝します。
解決
これらの多く static_cast
sは自動数値昇進のために不必要、である。非常に必要なものは、数1/2を構築する際に使用されるものですが、この場合、単に言わない明白な理由はありません 0.5
代わりに。いずれにせよ、注意を払っているコンパイラはこれらをすべて削除し、コンパイル時定数に置き換えます。
他のヒント
私は以前の答えに同意します 2.0
ここでははるかに良いでしょう。
しかし、私はコードに別の赤い旗を見つけました。 pow(something, 3)
.ザ- pow
関数は、2つの任意の値を取るように設計されています, x と y と返す x^y.この関数は任意の値を処理しなければならないので、近似を行います。ただし、この1)は計算が複雑で、2)はマークを見逃すことがあります。この場合、単純に使用する方がはるかに優れています something4 * something4 * something4
.
これは、はるかに読みやすいものと同等です
double part2 = 2 * somthing1 * (1 + something2)
+ 0.5 * something3 + 0.5 * something4 * something4 * something4
算術演算が1つのdoubleオペランドを持つたびに、整数はdoubleに昇格されるためです。0.5倍のlitteralは、すべてを2倍にするのに十分です。
所属していません StackOverflow