pow, powf, powl
من cppreference.com
معرفة في ملف <math.h> | ||
float powf(float base, float exponent ); | (1) | (منذ C99) |
double pow(double base, double exponent ); | (2) | |
longdouble powl(longdouble base, longdouble exponent ); | (3) | (منذ C99) |
معرفة في ملف <tgmath.h> | ||
#define pow( base, exponent ) | (4) | (منذ C99) |
1-3) تحسب قيمة رفع العدد
base
للأس exponent
.4) ماكرو عام النوع: إذا كان المعطى من النوع longdouble يتم استدعاء
powl
. أما إذا كان المعطى عدد صحيح أو من النوع double يتم استدعاء pow
. فيما عدا ذلك يتم استدعاء powf
. إذا كان المعطى عددا مركبا يتم استدعاء الدالة المركبة المناسبة (cpowf أو cpow أو cpowl).محتويات |
[تعديل]المعطيات
base | - | الأساس كعدد ذو فاصلة عائمة |
exponent | - | الأس كعدد ذو فاصلة عائمة |
[تعديل]القيمة المُرجعة
مالم يحدث خطأ يتم إرجاع base
مرفوعة لأس exponent
.(baseexponent
)
لو كان هناك خطأ في المجال يتم إرجاع قيمة تحددها البيئة (NaN على الأنظمة الداعمة لذلك). لو كان هناك خطأ قطبي أو في المدى نتيجة الطفح (Overflow) يتم إرجاع ±HUGE_VAL
أو ±HUGE_VALF
, أو ±HUGE_VALL
.
لو كان هناك خطأ في المدى نتيجة الطفح لأسفل يتم إرجاع القيمة الصحيحة بعد التقريب.
[تعديل]التعامل مع الأخطاء
يتم الإبلاغ عن الأخطاء كما هو موضح في math_errhandling.
[تعديل]ملحوظات
بينما لا يمكن حساب الجذر لعدد سالب عن طريق pow
يمكن استخدام cbrt في حالة أن الأس هو 1/3.
[تعديل]مثال
قم بتشغيل هذا الكود:
#include <stdio.h>#include <math.h>#include <errno.h>#include <fenv.h> #pragma STDC FENV_ACCESS ONint main(void){// الاستخدام المعتاد printf("pow(2, 10) = %f\n", pow(2,10)); printf("pow(2, 0.5) = %f\n", pow(2,0.5)); printf("pow(-2, -3) = %f\n", pow(-2,-3));// قيم خاصة printf("pow(-1, NAN) = %f\n", pow(-1,NAN)); printf("pow(+1, NAN) = %f\n", pow(+1,NAN)); printf("pow(INFINITY, 2) = %f\n", pow(INFINITY, 2)); printf("pow(INFINITY, -1) = %f\n", pow(INFINITY, -1));// التعامل مع الأخطاء errno=0; feclearexcept(FE_ALL_EXCEPT); printf("pow(-1, 1/3) = %f\n", pow(-1, 1.0/3));if(errno== EDOM) perror(" errno == EDOM");if(fetestexcept(FE_INVALID)) puts(" FE_INVALID raised"); feclearexcept(FE_ALL_EXCEPT); printf("pow(-0, -3) = %f\n", pow(-0.0, -3));if(fetestexcept(FE_DIVBYZERO)) puts(" FE_DIVBYZERO raised");}
خرج ممكن:
pow(2, 10) = 1024.000000 pow(2, 0.5) = 1.414214 pow(-2, -3) = -0.125000 pow(-1, NAN) = nan pow(+1, NAN) = 1.000000 pow(INFINITY, 2) = inf pow(INFINITY, -1) = 0.000000 pow(-1, 1/3) = -nan errno == EDOM: Numerical argument out of domain FE_INVALID raised pow(-0, -3) = -inf FE_DIVBYZERO raised
[تعديل]أنظر أيضا
(C99)(C99) | تحسب الجذر التربيعي (√x) (دالة) |
(C99)(C99)(C99) | تحسب الجذر التكعيبي (3√x) (دالة) |
(C99)(C99)(C99) | تحسب الجذر التربيعي لمجمع مربعي عددين معينين (√x2 +y2 ) (دالة) |
(C99)(C99)(C99) | computes the complex power function (دالة) |
مقالة مرجع C++ عن pow |