دالة 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)؟