Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fehler im Programm!!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.05.2005, 00:01 Uhr
~flashbrain
Gast


Hab irgendwo ein Fehler in meinem Programm...
Folgende Meldung wurde ausgegeben: "cannot convert `double __complex__' to `double' in assignment " und ich versteh nicht was ich falsch gemacht hab!
Hier das Programm:

C++:
#include <iostream>
#include <math.h>

using namespace std;

int main ()
{
double N, x, i, y=-1, T=0, S=x, Z=x, F, L, ende;
cout << "Geben sie den x-Wert an, an deren Stelle sie die log- und die arctan-Funktion approximieren wollen!";
cin >> x;
cout << "Geben sie eine natuerliche Zahl N ein, von der die Guete der Näherung abhängt";
cin >> N;
for (int i = 1; i <= 0; i++)
{
y = (-1) * x * y; // Potenz und alternierend plus,minus wird eingerichtet
T = T + y/i; // Erzeugung der Taylorreihe durch Aufsummierung
}
cout << "Die Approximierung fuer den log an der Stelle " << x << " ergab den y-Wert: " << T;
for ( int i = 1; i <= N; i++ )
{
Z = (-1) * x * x * Z;
S = S + Z / ( 2i + 1); // Hier meldet der compiler den Fehler
}
cout << "Die Approximierung fuer den arctan an der Stelle " << x << " ergab den y-Wert: " << S;
F = fabs(log ( 1 + x ) - T); // fabs ist fuer den Betrag
L = fabs(atan ( x ) - S);
cout << "Der Fehler der Approximierung betraegt beim log: " << F << " und beim arctan: " << L << " ! /n Zum beenden auf beliebige Taste! ";
cin >> ende;
return 0;
}



Wär euch echt dankbar wenn ihr mir helfen könnt!

Dieser Post wurde am 11.05.2005 um 08:59 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.05.2005, 07:41 Uhr
~JohnSilver
Gast


Wenn ich dein Programm compiliere bekomm ich den Fehler:

22 LProgramming\Untitled1.cpp

cannot convert `__complex__ double' to `double

Das Problem liegt beim i nach dem 2er!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.05.2005, 08:06 Uhr
doppler



Versuch es mal mit

C++:
for ( int i = 1; i <= N; i++ )
{
Z = (-1) * x * x * Z;
S = S + Z / ( 2*i + 1);
}


Außerdem solltest du S und Z erst nach dem Einlesen von x setzen, da sie sonst noch den alten Wert von x haben (der auch nicht 0 sein muss).

Man sollte noch darauf hinweisen, dass die Taylor-Summe nur in einer kleinen Umgebung eine gute Approximation ist. Wenn man in deinem Fall zu weit von 1 bei log bzw. 0 bei arctan weggeht, bekommt man zum Einen große Rundungsfehler und zum Anderen werden die wegelassenen Terme groß.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.05.2005, 09:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ich würde es mal mit double i probieren, meist erzeugen solche "__complex__" errors verschachtelte typumwandlungen die der Compiler nicht mehr packt.


C++:
for ( double i = 1; i <= N; i++ )
{
Z = (-1) * x * x * Z;
S = S + Z / ( 2*i + 1);
}



oder

C++:
for ( int i = 1; i <= N; i++ )
{
Z = (-1) * x * x * Z;
S = S + Z / (double)( 2*i + 1);
}



dir ist schon klar das das

S = S + Z / (double)( 2*i + 1);

folgendermaßen ausgeführt wird:

T = 2*i+1
T = Z / T
S = S + T
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.05.2005, 09:45 Uhr
doppler



Ich denke, dass das Problem nicht bei einem cast lag, sondern daran, dass der Compiler (jedenfalls der gcc) 2i als Konstante vom Typ const __complex__ int interpretiert. Siehe
http://database.sarang.net/study/c/gcc/gcc_C_Extensions.html
Daher hilft es auch, 2*i zu schreiben. Das i ist dann ein Suffix wie das f in 2f, um zu sagen, dass man eine Konstante vom Typ float haben möchte.

Dieser Post wurde am 11.05.2005 um 09:45 Uhr von doppler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.05.2005, 10:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jo kann auch sein, trotzdem sollte man immer lieber einmal explizit den typ hinschreiben, macht den code auch lesbarer.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.05.2005, 11:12 Uhr
Tommix



Hallo,
@FloSoft,
daß man in einem C++ - Programm ab und zu mal einen C-cast hinschreiben sollte, halte ich für einigermaßen diskussionswürdig.
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.05.2005, 13:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja hin und wieder
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: