সি / সি ++ এ কি কোনও স্ট্যান্ডার্ড সাইন ফাংশন (সিগনাম, এসএনজিএন) রয়েছে?
হ্যাঁ, সংজ্ঞা অনুসারে।
সি 99 এবং পরে signbit()
ম্যাক্রোটি রয়েছে<math.h>
int signbit
(বাস্তব-ভাসমান x
); ম্যাক্রো আয় একটি অশূন্য মান যদি এবং কেবল যদি যুক্তি মান চিহ্ন নেতিবাচক। সি 11 §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
। অনেকগুলি একটি পূর্ণসংখ্যার পয়েন্ট অফ ভিউয়ের জন্য প্রস্তুত থাকে যা সাধারণত নো-অ-নম্বর ( এনএএন ) এবং -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;
}