![]() |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Zitat:
|
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
float wird nicht infinit :)
ok, mormalerweise nicht. bei diesem definierten infinit-Value müßte man es testen. |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Naja, das kann schon passieren. 1/0 liefert infinty, -1/0 liefert -infinity (die 0 ist hier eine +0)
Wie sich das jetzt verhält, hängt davon ab, wie sich die FPU bei Vergleichen von Infinity-Werten verhält, das müsste ich jetzt ausprobieren... |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Zitat:
Code:
ich hoff das sieht nicht all zu schlimm aus (kommt ja nur von 'nem Pascaler)
int sgn(float p)
{ if (p < 0) { return -1; } else if (p > 0) { return +1; } else return 0; } |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Das nenne ich dann, das Problem elegant "umschifft"... ;)
Ciao, Frederic |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Unendlich große Werte sind kein Problem, aber NaNs, denn mit diesen schlagen alle Vergleiche fehl.
Edit: Oder auch nicht. Vermutlich ist das Ergebnis vom C-Standard nicht definiert. |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Was mir grad noch einfällt, es gibt auch in Delphi eine Funktion für den trinären Operator: "ifthen", die ist (glaube ich) in der Unit Math.
|
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Dort werden allerdings beide Argumente in jedem Fall ausgewertet, was die Nützlichkeit drastisch reduziert. Hier geht es natürlich, weil es sich um Konstanten handelt.
|
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Damit hast du natürlich recht. Außerdem ist IfThen AFAIR nur für Zahlen definiert, man kann sich allerdings seilbst ein paar zusätzliche Funktionen definieren, um andere Typen wie String oder Variant abzudecken, so etwa:
Delphi-Quellcode:
Aber langsam wirds OT :)
unit MyIfThen;
//----------------------------------------------------------------------------- interface function IfThen(i_bl: boolean; i_sTrue: string; i_sFalse: string = '0'): string; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- implementation function IfThen(i_bl: boolean; i_sTrue: string; i_sFalse: string = '0'): string; begin if(i_bl) then Result := i_sTrue else Result := i_sFalse; end; //----------------------------------------------------------------------------- end. |
Re: [C] sgn-Funktion verhält sich komisch (falsche Rückgabe)
Müsste ein trinärer Operator unter neuen Delphis nicht mit einer generischen Funktion (bool, TFunc<T>, TFunc<T>): T und anonymen Funktionen recht eklig zu machen sein? ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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-2025 by Thomas Breitkreuz