Avatar ·

دالة sign القياسية (signum, sgn) في C++: هل هي موجودة وكيفية تنفيذها؟

مرحباً أيها الزملاء! أنا أكتب برنامجاً صغيراً بلغة C++ للتحليل العددي، واحتجت إلى دالة تُرجع إشارة الرقم: -1 للأعداد السالبة، 0 للصفر، و1 للأعداد الموجبة. في الرياضيات تُسمى signum أو sgn. لقد بحثت في توثيق و ، لكنني لم أجد شيئاً مشابهاً. في Python يوجد numpy.sign()، وفي MATLAB يوجد sign()، أما في C++ فالصمت. أليس في المكتبة القياسية لـ C++ شيء أساسي كهذا؟ هذا مثال لما أريد فعله: ```cpp #include #include // ربما هنا؟ int main() { double x = -5.7; // أتمنى كتابة شيء مثل: // int s = sign(x); // لكن المترجم يشتكي من أن sign غير معلن. // أضطر لكتابة حلول بديلة: int s; if (x > 0) s = 1; else if (x < 0) s = -1; else s = 0; std::cout << "sign(" << x << ") = " << s << std::endl; return 0; } ``` هل هناك طريقة أفضل؟ هل توجد دالة قياسية في C++17 أو C++20؟ وإذا لم تكن موجودة، ما هي أفضل طريقة لتنفيذها مع الحفاظ على الأداء والتعامل مع أنواع مختلفة (int, float, double)؟