المتغيرات
فضاءات التسمية
أفعال

fmod, fmodf, fmodl

من cppreference.com
< c‏ | numeric‏ | math
 
 
 
دوال رياضية شائعة
الدوال
عمليات بسيطة
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
دوال أسية ولوغارتمية ثابتة الأساس
(C99)
(C99)
دوال أسية وجذور
دوال حساب المثلثات والدول الزائدية
دالة الخطأ ودالة غاوس
(C99)
(C99)
(C99)
(C99)
إيجاد أقرب عدد صحيح لفاصلة عائمة (float)
(C99)
(C99)(C99)(C99)
دوال التعديل على الفاصلة العائمة (float)
(C99)(C99)
(C99)
(C99)
التصنيف والمقارنة
(C99)
(C99)
(C99)
ثوابت ماكرو
 
معرفة في ملف <math.h>
float       fmodf(float x, float y );
(1) (منذ C99)
double      fmod(double x, double y );
(2)
longdouble fmodl(longdouble x, longdouble y );
(3) (منذ C99)
معرفة في ملف <tgmath.h>
#define fmod( x, y )
(4) (منذ C99)
1-3) تحسب باقي قسمة ذو فاصلة عائمة x/y.
4) ماكرو عام النوع: إذا كان المعطى من النوع longdouble يتم استدعاء ‎fmodl‎. أما إذا كان المعطى عدد صحيح أو من النوع double يتم استدعاء ‎fmod‎. فيما عدا ذلك يتم استدعاء ‎fmodf‎.

باقي القسمة الناتج عن العملية x/y يساوي بالضبط ‎ x - n*y‎ حيث ‎n‎ هي x/y بعد إزالة الجزء الكسري

القيمة المُرجعة إشارتها نفس إشارة ‎x‎ ودائما ماتكون قيمتها المطلقة أصغر من أو يساوي ‎y‎

محتويات

[تعديل]المعطيات

x, y - عددين ذوي فاصلة عائمة

[تعديل]القيمة المُرجعة

في حالة النجاح, تُرجع باقي قسمة ذو فاصلة عائمة كما هو معرف بالأعلى

لو كان هناك خطأ في المجال يتم إرجاع قيمة تحددها البيئة (غالبا NaN على الأنظمة الداعمة لذلك).

لو كان هناك خطأ في المدى نتيجة الطفح لأسفل (Underflow) يتم إرجاع القيمة الصحيحة بعد التقريب.

[تعديل]التعامل مع الأخطاء

يتم الإبلاغ عن الأخطاء كما هو موضح في math_errhandling.

إذا كانت ‎y‎ بصفر ربما يحدث خطأ في المجال.

إذا كانت البيئة تدعم حسابات الفاصلة العائمة طبقا للـ IEEE (المعيار IEC 60559 تحديدا):

  • If ‎x‎ is ±0 and ‎y‎ is not zero, ±0 احذفني is returned
  • لو كان ‎x‎ بـ ±∞ و ‎y‎ قيمة عدا NaN, يتم إرجاع NaN ورفع الإشارة FE_INVALID‎
  • لو كان ‎y‎ بـ ±0 و ‎x‎ قيمة عدا NaN, يتم إرجاع NaN ورفع الإشارة FE_INVALID‎
  • لو كان ‎y‎ بـ ±∞ و‎x‎ قيمة نهائية, يتم إرجاع ‎x‎
  • لو أي من المعطيين NaN يتم إرجاع NaN

[تعديل]ملحوظات

تشترط POSIX حدوث خطأ في المجال إذا كانت ‎x‎ لانهائية أو كانت ‎y‎ بصفر.

تتصرف النسخة الـ double من fmod كما لو تم تطبيقها كالآتي:

double fmod(double x, double y){#pragma STDC FENV_ACCESS ONdouble result = remainder(fabs(x), (y = fabs(y)));if(signbit(result)) result += y;return copysign(result, x);}

[تعديل]مثال

#include <stdio.h>#include <math.h>#include <fenv.h>   #pragma STDC FENV_ACCESS ONint main(void){ printf("fmod(+5.1, +3.0) = %.1f\n", fmod(5.1,3)); printf("fmod(-5.1, +3.0) = %.1f\n", fmod(-5.1,3)); printf("fmod(+5.1, -3.0) = %.1f\n", fmod(5.1,-3)); printf("fmod(-5.1, -3.0) = %.1f\n", fmod(-5.1,-3));   // special values printf("fmod(+0.0, 1.0) = %.1f\n", fmod(0, 1)); printf("fmod(-0.0, 1.0) = %.1f\n", fmod(-0.0, 1)); printf("fmod(+5.1, Inf) = %.1f\n", fmod(5.1, INFINITY));   // error handling feclearexcept(FE_ALL_EXCEPT); printf("fmod(+5.1, 0) = %.1f\n", fmod(5.1, 0));if(fetestexcept(FE_INVALID)) puts(" FE_INVALID raised");}

خرج ممكن:

fmod(+5.1, +3.0) = 2.1 fmod(-5.1, +3.0) = -2.1 fmod(+5.1, -3.0) = 2.1 fmod(-5.1, -3.0) = -2.1 fmod(+0.0, 1.0) = 0.0 fmod(-0.0, 1.0) = -0.0 fmod(+5.1, Inf) = 5.1 fmod(+5.1, 0) = nan FE_INVALID raised

[تعديل]أنظر أيضا

تحسب خارج وباقي قسمة عددين صحيحين
(C99)
(دالة)[edit]
تحسب باقي قسمة ذو إشارة لعددين ذوي فاصلة عائمة
(دالة)[edit]
(C99)(C99)(C99)
تحسب باقي قسمة ذو إشارة بالإضافة إلى آخر 3 بت من ناتج القسمة
(دالة)[edit]
close