Ist die Vorzeichenfunktion ein Standardeinschluss in C/C?
Auf der Suche nach einer Funktion, die für negative Zahlen eindeutig -1 zurückgibt und 1 für positive Zahlen, stellt sich natürlich die Frage: Existiert diese Funktion nativ im C/C-Standard? Bibliotheken?
Eintauchen in die Antwort
Zum anfänglichen Entsetzen der Programmierer enthalten die C/C-Standardbibliotheken nicht explizit eine „Signum“- oder „SGN“-Funktion diesen Zweck erfüllen. Wie die bereitgestellte Lösung zeigt, gibt es jedoch eine Problemumgehung mithilfe einer typsicheren C-Funktion:
1 2 3 | template <typename T> int sgn(T val) {
return (T(0) < val) - (val < T(0));
}
|
Nach dem Login kopieren
Vorteile dieses Ansatzes:
Diese Vorlagenfunktion bietet mehrere Vorteile:
-
Genaue Signum-Implementierung: Es gibt -1, 0, oder 1, wobei die wahre Definition des Signums eingehalten wird.
-
Vielseitigkeit: Es kann auf verschiedene Datentypen angewendet werden, einschließlich Ganzzahlen, Gleitkommazahlen, Doppelzahlen, vorzeichenlose Kurzzahlen und benutzerdefinierte Typen.
-
Effiziente Ausführung: Die Vorlage vermeidet langsame Copysign-Aufrufe und optimiert die Leistung durch Branchless Code.
-
Standardkonformität: Im Gegensatz zu bitverschiebenden Alternativen bleibt es mit allen Bitdarstellungen konsistent.
-
Hochpräzise Erhaltung: Es behält bei Die maschineninterne hochpräzise Darstellung verhindert ein vorzeitiges Verrunden Fehler.
Potenzielle Einschränkungen:
-
Kompilierungszeit: Als Vorlage kann die Kompilierung in bestimmten Fällen länger dauern Kontexte.
-
Überlastungsüberlegungen: Für vorzeichenlose Typen wird der Code generiert eine Warnung, die durch Überlastungen behoben werden kann.
Das obige ist der detaillierte Inhalt vonEnthält C/C von Haus aus eine Vorzeichenfunktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!