มีฟังก์ชั่นสัญญาณมาตรฐาน (signum, sgn) ใน C / C ++ หรือไม่
ใช่ขึ้นอยู่กับคำจำกัดความ
C99 และใหม่กว่ามีsignbit()
มาโคร<math.h>
int signbit
(ลอยจริงx
); แมโครผลตอบแทนค่าไม่ใช่ศูนย์ถ้าหากสัญญาณของค่าอาร์กิวเมนต์เป็นลบ C11 §7.12.3.6
signbit
ทว่า OP ต้องการบางสิ่งที่แตกต่างออกไปเล็กน้อย
ฉันต้องการฟังก์ชั่นที่คืนค่า -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
กล่าวถึง หลายคนกำลังมุ่งสำหรับจำนวนเต็มจุดของมุมมองที่มักจะขาดไม่-a-เบอร์ (เป็นน่าน ) และ-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;
}