2016-09-28 5 views
5

doubleの値の差の絶対値を計算し、doubleの結果が必要です。代わりに、私はintを取得しています。intの代わりにabs(double)をdoubleにする

#include <typeinfo> 
// ... 
printf(
    "a:%s b:%s delta:%s abs:%s\n", 
    typeid(a).name(), 
    typeid(b).name(), 
    typeid(a - b).name(), 
    typeid(abs(a - b)).name() 
); 
// Prints: a:d b:d delta:d abs:i 

減算の結果がすでに二重のであれば、なぜabsdouble abs (double x);署名を使用していませんか?実際には、どのようにして整数を返すことができますか?最も重要なことは、どのようにしてdoubleを返すのですか?

それが違いを作る場合は、abは実際にmyData.m_latotherData.latitude()です。

+3

あなたが呼んでいる「abs」機能を知る方法はありません。 [mcve]が役に立ちます。 – juanchopanza

答えて

10

意図せずにインポートされたC標準ライブラリヘッダーとの衝突を回避するには、代わりにstd::absを使用します。これはC++バージョンであり、すでに知っているように、重複しています。

それ以外の場合は、C標準ライブラリのfabsを使用してください。前floating pointsおよびintegralsためのC++ 17 abs異なるヘッダ(cmathcstdlibそれぞれ)で定義されたの

+0

ありがとう、それはそれをしました。 :)確かに、私はまだ知りませんでした。最後の2週間を除いて、私は1994年にC++で最後にプログラムしました。:) – Phrogz

+0

同様の問題を避けるために '' -Wconversion''を使ってビルドすることもお勧めします – Arvid

関連する問題