Avatar ·

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

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