![]() |
[C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Hi!
Entweder stehe ich mächtig auf dem Schlauch oder irgendwas ist hier faul. Es geht um die Implementierung der SGN-Funktion. Folgender Versuch scheitert ganz massiv:
Code:
Es kommt folgendes bei raus:
int sgn(float p)
{ if(p=0) return 0; if(p>0) return 1; if(p<0) return -1; }
Code:
sgn(-9) --> -1
sgn(0) --> 7842 sgn(6) --> 7842 Lasse ich das letzte if weg (also immer -1 returnen, wenn er an die stelle kommt) oder schreibe noch irgendein return dahinter ist alles in Butter. Meine Vermutung ist, dass es irgendwas mit undefiniertem Funktionswert zu tun haben könnte, aber ich verstehe nicht wieso. Es sind ja alle Eingaben eigentlich abgedeckt... Ciao, Frederic |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
[edit]snip, desregard that :/[/edit]
|
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Ähem!
Code:
Wie heißt der Gleichheitsoperator in C? ;)
if(p=0)
return 0; |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Zitat:
Wie kommt allerdings das seltsame Ergebnis dann zustande? (p=0) ergibt doch eigentlich immer true, sodass eine 0 zurückgegeben wird und p danach 0 ist ? |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
p=0 gibt 0 zurück, 0 wird als false interpretiert, der Rückgabewert ist daher undefiniert. (Also Stackmüll)
|
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
ARGH :wall: :wall: :wall: :wall: :wall: :wall:
Es ist nicht mein Code, aber ich habe ihn jetzt bestimmt 2h angeschaut und kam nicht drauf woran es hängt. Dann ist der Fehler aber klar. Es wird 0 zu gewiesen, dann gibt es dafür aber keinen Else-Fall mehr und somit undef. irgendwas als Ergebnis... Danke! |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Das passiert jedem mal, vor allem, wenn man nicht allzu viel mit C macht, und selbst wenn... Da ist eine strenge Sprache wie Java doch von Vorteil, da kann sowas nur passieren, wenn man Booleans vergleicht, und wann macht man das schon. :mrgreen:
Im übrigen, die übersichtliche Version wäre ja die folgende:
Code:
int sgn(float x) {
return (x<0)?-1:((x>0)?1:0)); } |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Ob ein Programmieranfänger dir da zustimmen würde?
Aber grundsätzlich hast du recht! |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Da war auch eine gewisse Ironie dabei. ;)
|
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz