は、整数または浮動小数点値の絶対値を算出し、条件演算子を使用する場合と比較のmath.hからSTDLIB.HからABS又はファブを使用して任意の利点がありますか? float
と二重とint
(又は狭い)とabs()
、fabs()
、を使用する必要が絶対値演算
#define ABS(x) (((x) >= 0)? (x): -(x))
は、整数または浮動小数点値の絶対値を算出し、条件演算子を使用する場合と比較のmath.hからSTDLIB.HからABS又はファブを使用して任意の利点がありますか? float
と二重とint
(又は狭い)とabs()
、fabs()
、を使用する必要が絶対値演算
#define ABS(x) (((x) >= 0)? (x): -(x))
コード、long
とlabs(x)
など@Joachim Pileborg
利点:非マクロ。 ABS()
マクロは引数を2回評価しますが、ABS(x++)
のように望ましくない可能性があります。 @EOFおよび@EOF
利点:非マクロ。シーケンスポイントの確定性。 @EOF
利点:非マクロ。 -0.0
は、OPのABS()
で-0.0
を返します。 fabs(-0.0)
は0.0
を返します。 IEC 60559浮動小数点演算に従う場合
利点:非マクロ。 ABS(0.0/0.0)
記号を変更しようとします。 (コーナーケースの懸念)。
利点:非マクロ。 abs()
,fabs()
は標準機能であり、査読者が容易に理解できる。 ABS()
はありません。
パフォーマンス:お使いのプラットフォームで最適なものを見つけるためのプロファイル。 とは何ですか?(速度、コードサイズ、メモリサイズ)は、コンパイラによって異なります。
ABS()
でタイプチェックしません。
マクロのアドレスを取得できません。
「abs(x ++)」を試してください。マクロがどこにあるのかを見てください。 – EOF
はい、 'abs'と' fabs'関数は*標準*関数です。そしてそれらはマクロではなく*関数*です。 –
'abs'や' fabs'が使われていると、コードが読みやすくなるかもしれません。 – Codor