क्या C / C ++ में एक मानक साइन फ़ंक्शन (साइनम, sgn) है?
हां, परिभाषा पर निर्भर करता है।
C99 और बाद में signbit()
मैक्रो में है<math.h>
int signbit
(वास्तविक-अस्थायी x
); मैक्रो रिटर्न एक अशून्य मूल्य यदि और केवल यदि अपने तर्क मूल्य के हस्ताक्षर नकारात्मक है। C11 §7.12.3.6
signbit
फिर भी ओपी कुछ अलग करना चाहता है।
मैं एक फ़ंक्शन चाहता हूं जो नकारात्मक संख्याओं के लिए -1 और सकारात्मक संख्याओं के लिए +1 देता है। ... एक समारोह चल रहा है।
#define signbit_p1_or_n1(x) ((signbit(x) ? -1 : 1)
और गहरा:
पोस्ट निम्नलिखित मामलों में विशिष्ट नहीं है x = 0.0, -0.0, +NaN, -NaN
:।
एक क्लासिक signum()
रिटर्न +1
पर x>0
, -1
पर x<0
और 0
पर x==0
।
कई उत्तर पहले ही कवर कर चुके हैं, लेकिन पता नहीं है x = -0.0, +NaN, -NaN
। कई एक पूर्णांक बिंदु के लिए तैयार किए जाते हैं, जिनमें आमतौर पर नॉट-ए-नंबर ( NaN ) और -0.0 का अभाव होता है ।
विशिष्ट उत्तर signnum_typical()
ऑन की तरह कार्य -0.0, +NaN, -NaN
करते हैं, वे वापस लौटते हैं 0.0, 0.0, 0.0
।
int signnum_typical(double x) {
if (x > 0.0) return 1;
if (x < 0.0) return -1;
return 0;
}
इसके बजाय, मैं इस कार्यक्षमता का प्रस्ताव करता हूं: पर -0.0, +NaN, -NaN
, यह वापस लौटता है -0.0, +NaN, -NaN
।
double signnum_c(double x) {
if (x > 0.0) return 1.0;
if (x < 0.0) return -1.0;
return x;
}