نطاقات
المتغيرات
أفعال

fmod, fmodf, fmodl

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