int

2016-09-28 8 views
5

के बजाय पेट (डबल) से डबल परिणाम प्राप्त करना मुझे दो double मानों के अंतर के पूर्ण मूल्य की गणना करने की आवश्यकता है और double परिणाम है। इसके बजाय, मुझे int मिल रहा है।int

#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 वापस करने के लिए कैसे मजबूर करूं?

मामले में यह एक फर्क नहीं पड़ता, a और b वास्तव में myData.m_lat और otherData.latitude() हैं।

+3

यह जानने का कोई तरीका नहीं है कि आप क्या 'abs' फ़ंक्शन कॉल कर रहे हैं। [एमसीवी] मदद करेगा। – juanchopanza

उत्तर

10

अनजाने में आयातित सी मानक लाइब्रेरी शीर्षलेखों के साथ संघर्ष से बचने के लिए, std::abs का उपयोग करें। यह सी ++ संस्करण है, और भारी अधिभारित है, जैसा कि आप पहले ही जानते हैं।

अन्यथा सी मानक पुस्तकालय से fabs का उपयोग करें।

+0

धन्यवाद, यह किया। :) दरअसल, मुझे पहले से ही पता नहीं था। पिछले दो हफ्तों के अलावा, मैंने आखिरी बार 1 99 4 में सी ++ में प्रोग्राम किया था। :) – Phrogz

+0

मैं इसी तरह की समस्याओं से बचने के लिए ''-Wconversion'' के साथ बिल्डिंग का भी सुझाव दूंगा – Arvid

2

सी ++ 17 absfloating points के लिए करने से पहले और integrals के लिए अलग हेडर (cmath और cstdlib क्रमशः) में परिभाषित किया गया।

संबंधित मुद्दे