casten von int auf double



  • #include <iostream>
    
    using namespace std;
    
    void func( int array[], size_t size )
    {
      for( int i = 0; i < size; ++i )
          array[ i ] = i;
    }
    
    int main()
    {
      double a;
      int *array = new int[ 100 ];
      func( array, 100 );
    
      a=array[20]/40; //a=0  
      cout<<a<<endl;
      delete[] array;
    }
    

    hi

    was muss ich denn hier ändern ich verstehe nicht warum das nicht funktioniert?



  • Hallo,

    was funktioniert da nicht?



  • Divisionen von integralen Skalaren werden immer abgerundet. Dein 2040\frac{20}{40} wird abgerundet zu 0.

    Mach aus 40 einfach 40. , dann ist es ein Fließkomma-Literal und das Ergebnis des Ausdrucks auch.

    a = array[20] / 40.;
    


  • Danke



  • new[] ist übrigens Mist. Für dynamische Arrays gibt es in richtigem C++ den vector .

    #include <iostream>
    #include <vector>
    using namespace std;
    
    void func( int array[], size_t size )
    {
    	//der richtige Typ von i ist size_t
    	for( size_t i = 0; i < size; ++i )
    		array[ i ] = i;
    }
    
    int main()
    {
    	double a;
    	std::vector<int> array(100);
    	func( array.data(), array.size() );
    
    	a=array[20]/40.; //a=0.5  
    	cout<<a<<endl;
    }
    

Anmelden zum Antworten