Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C] sgn-Funktion verhält sich komisch (falsche Rückgabe) (https://www.delphipraxis.net/127952-%5Bc%5D-sgn-funktion-verhaelt-sich-komisch-falsche-rueckgabe.html)

fkerber 21. Jan 2009 22:31


[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:
int sgn(float p)
{
   if(p=0)
   return 0;

   if(p>0)
   return 1;

   if(p<0)
   return -1;
}
Es kommt folgendes bei raus:
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

Dax 21. Jan 2009 22:34

Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
 
[edit]snip, desregard that :/[/edit]

3_of_8 21. Jan 2009 22:39

Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
 
Ähem!

Code:
   if(p=0)
   return 0;
Wie heißt der Gleichheitsoperator in C? ;)

Florian H 21. Jan 2009 22:42

Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
 
Zitat:

Zitat von 3_of_8
Ähem!
Wie heißt der Gleichheitsoperator in C? ;)

Joah, böse Falle für Pascal'er :)
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 ?

3_of_8 21. Jan 2009 22:44

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)

fkerber 21. Jan 2009 22:45

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!

3_of_8 21. Jan 2009 22:49

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));
}

fkerber 21. Jan 2009 22:51

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!

3_of_8 21. Jan 2009 22:54

Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
 
Da war auch eine gewisse Ironie dabei. ;)

Der Jan 21. Jan 2009 23:38

Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
 
Zitat:

Zitat von 3_of_8

Im übrigen, die übersichtliche Version wäre ja die folgende:
Code:
int sgn(float x) {
  return (x<0)?-1:((x>0)?1:0));
}

Ich bezweifle, dasss das ein Pascaler für übersichtlich halten wird, aber ich liebe diesen Operator :) *sich duckt und wegschleicht*


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz