2012-08-22 10 views
11

का उपयोग करते समय शून्य आंतरिक उत्पाद नीचे दिए गए सी ++ प्रोग्राम को एक कठोर सकारात्मक मूल्य वापस करना चाहिए। हालांकि, यह 0 देता है।std :: inner_product

क्या होता है? मुझे एक डबल-डबल रूपांतरण पर संदेह है, लेकिन मैं यह नहीं समझ सकता कि क्यों और कैसे।

#include <iostream> 
#include <vector> 
#include <numeric> 
using namespace std; 
int main() 
{ 

    vector<double> coordinates; 
    coordinates.push_back(0.5); 
    coordinates.push_back(0.5); 
    coordinates.push_back(0.5); 

    cout<<inner_product(coordinates.begin(), coordinates.end(), coordinates.begin(), 0)<<endl; 

    return 0; 
} 
+3

चक्कर। वह मुझे एक बार भी मिला। –

उत्तर

13

क्योंकि आपने 0 का प्रारंभिक मान प्रदान किया है, int

int result = 0; 

result = result + 0.5 * 0.5; // first iteration 
result = result + 0.5 * 0.5; // second iteration 
result = result + 0.5 * 0.5; // third iteration 

return result; 

जबकि result + 0.5 * 0.5 सही मान (result इस अभिव्यक्ति में double करने के लिए प्रोत्साहित किया जाता है), जब कि मूल्य result में वापस असाइन किया गया है पैदा करता है, इसे संक्षिप्त कर दिया है (कि अभिव्यक्ति int को डाला जाता है): अपने कोड आंतरिक के बराबर है । आप 1 से ऊपर कभी नहीं पहुंचते हैं, इसलिए आप 0 देखते हैं।

इसके बजाय इसे 0.0 का प्रारंभिक मान दें।

3

ऐसा इसलिए है क्योंकि आपने शून्य को पूर्णांक स्थिर के रूप में प्रदान किया है। परिणामी संचालन सभी पूर्णांक में हैं, इसलिए अंतिम मान (0.75) को int पर भी छोटा कर दिया गया है।

बदलें शून्य 0.0 के लिए यह काम करने के लिए:

cout << inner_product(coord.begin(), coord.end(),coord.begin(), 0.0) << endl; 

यह 0.75ideone पर पैदा करता है।

+0

दरअसल, यह वापस शून्य पर वापस जाने से पहले 0.25 से अधिक नहीं हो जाता है। मैंने एक शब्द बनाया। –

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