عملیات Modulo

از ویکیپدیا، دانشنامه آزاد
رفتن به ناوبری پرش به جستجو

در محاسبه ، عملكرد مدول باقیمانده یا باقی مانده امضا شده از یك تقسیم را پس از تقسیم یك عدد بر عدد دیگر (كه مدول عمل نامیده می شود) برمی گرداند .

توجه به دو عدد مثبت و N ، پیمانه N (مخفف آن وزارت دفاع N ) است باقی مانده از تقسیم اقلیدسی از توسط N ، که در آن است سود سهام و N است مقسوم علیه . [1] عملیات مدول باید از مد نماد ، که به مدول [2] (یا تقسیم کننده) که از آن عمل می کند ، متمایز شود . [ نیاز به توضیح ]

به عنوان مثال ، عبارت "5 mod 2" به 1 ارزیابی می شود ، زیرا 5 تقسیم بر 2 دارای ضریب 2 و باقیمانده 1 است ، در حالی که "9 mod 3" برابر 0 است ، زیرا تقسیم 9 بر 3 دارای ضریب 3 و باقیمانده 0 ؛ پس از ضرب 3 در 3 ، چیزی برای کسر از 9 وجود ندارد.

اگرچه معمولاً با a و n هر دو عدد صحیح انجام می شود ، اما بسیاری از سیستم های محاسباتی اکنون انواع دیگری از عملوندهای عددی را مجاز می دانند. محدوده مقادیر برای یک عملیات مدول صحیح n از 0 تا n - 1 است ( یک حالت 1 همیشه 0 است ، یک حالت 0 تعریف نشده است ، احتمالاً منجر به تقسیم بر صفر خطا در برخی از زبان های برنامه نویسی می شود ). برای یک قرارداد قدیمی و مرتبط که در نظریه اعداد به کار رفته است ، به حساب مدولار مراجعه کنید .

وقتی دقیقاً یکی از a یا n منفی باشد ، تعریف ساده لوحانه تجزیه می شود و زبان برنامه نویسی در نحوه تعریف این مقادیر متفاوت است.

انواع تعریف

در ریاضیات ، نتیجه عمل مدول یک کلاس معادل سازی است و هر یک از اعضای کلاس ممکن است به عنوان نماینده انتخاب شوند . با این حال ، نماینده معمولی کمترین باقی مانده مثبت است ، کوچکترین عدد صحیح غیر منفی که به آن طبقه تعلق دارد (یعنی بقیه تقسیم اقلیدسی ). [3] با این حال ، کنوانسیون های دیگر امکان پذیر است. رایانه ها و ماشین حساب ها روشهای مختلفی برای ذخیره و نمایش اعداد دارند. بنابراین تعریف آنها از عملیات modulo بستگی به زبان برنامه نویسی یا سخت افزار اصلی دارد .

تقریبا در تمام سیستم ها، خارج قسمت محاسبه Q و باقی مانده R از تقسیم بر N برآورده شرایط زیر:

 

 

 

 

( 1 )

با این حال ، اگر بقیه غیر صفر باشد ، این هنوز ابهامی بر جای می گذارد: دو انتخاب احتمالی برای بقیه اتفاق می افتد ، یکی منفی و دیگری مثبت ، و دو انتخاب احتمالی برای ضریب اتفاق می افتد. در نظریه اعداد ، بقیه مثبت همیشه انتخاب می شود ، اما در محاسبات ، زبان های برنامه نویسی بسته به زبان و علائم a یا n انتخاب می کنند . [a] استاندارد پاسکال و ALGOL 68 ، به عنوان مثال ، باقی مانده مثبت (یا 0) را حتی برای مقسومه های منفی می دهند ، و برخی از زبان های برنامه نویسی ، مانند C90 ، در صورت منفی بودن n یا a آن را به اجرا واگذار می کنند (به جدول زیر § در زبان های برنامه نویسیبرای جزئیات) پیمانه 0 است که در اکثر سیستم های تعریف نشده، اگر چه برخی آن را به عنوان تعریف .

  •  ضریب ( q ) و بقیه ( r ) به عنوان توابع تقسیم ( الف ) ، با استفاده از تقسیم کوتاه شده
    در بسیاری از پیاده سازی ها از تقسیم بندی کوتاه استفاده می شود ، جایی که ضریب به صورت کوتاه (قسمت صحیح) تعریف می شودو بنابراین بر اساس معادله ( 1 ) باقی مانده دارای علامت یکسانی برای سود سهام است . ضریب به صفر گرد می شود: برابر با عدد صحیح اول در جهت صفر از ضریب عقلی دقیق.
  • مقدار و باقی مانده با استفاده از تقسیم طبقه ای
    دونالد کنوت [4] تقسیم طبقه ای را توصیف کرد که در آن ضریب با عملکرد کف تعریف می شود و بنابراین بر اساس معادله ( 1 ) باقی مانده دارای علامت یکسانی از تقسیم کننده خواهد بود. با توجه به عملکرد طبقه ، ضریب همیشه به سمت پایین گرد می شود ، حتی اگر قبلاً منفی باشد.
  • نصف و باقی مانده با استفاده از تقسیم اقلیدسی
    ریموند تی بوتی [5] تعریف اقلیدسی را توصیف می کند که در آن باقی مانده همیشه منفی ، 0 ≤ r است و بنابراین با الگوریتم تقسیم اقلیدسی مطابقت دارد. در این مورد،

    یا معادل آن

    که در آن SGN است تابع علامت ، و در نتیجه

  • ضریب و بقیه با استفاده از تقسیم گرد کردن
    تقسیم دور جایی است که ضرایب در آن قرار دارد یعنی گرد به نزدیکترین عدد صحیح. در Common Lisp و IEEE 754 یافت می شود ( دور نزدیکترین کنوانسیون را در IEEE-754 ببینید). بنابراین ، علامت باقی مانده نزدیکترین به صفر انتخاب می شود .
  • نصف و باقی مانده با استفاده از تقسیم سقف
    Common Lisp همچنین تقسیم سقف (باقیمانده علامت متفاوت از مقسومه) را که در آن ضریب به دست می آید تعریف می کند به بنابراین ، علامت باقیمانده متفاوت از تقسیم کننده است .

همانطور که توسط Leijen توضیح داده شده است ،

بوتی استدلال می کند که تقسیم اقلیدسی از نظر منظم بودن و خواص مفید ریاضی بر سایر تقسیم بندی ها برتر است ، اگرچه تقسیم طبقه ای که توسط کنوت ترویج می شود نیز تعریف خوبی است. علیرغم کاربرد گسترده آن ، تقسیم بندی کوتاه از سایر تعاریف پایین تر است.

-  Daan Leijen ، بخش و مدول برای دانشمندان کامپیوتر [6]

با این حال ، تقسیم بندی کوتاه هویت را برآورده می کند به [7]

نشانه گذاری

برخی از ماشین حساب ها دارای دکمه تابع mod () هستند و بسیاری از زبان های برنامه نویسی عملکرد مشابهی دارند ، به عنوان مثال به عنوان mod ( a ، n ) بیان شده است . برخی از عباراتی که از "٪" ، "mod" یا "Mod" به عنوان عملگر modulo یا باقی مانده استفاده می کنند ، مانند a % nیا a mod n.

برای محیط هایی که عملکرد مشابهی ندارند ، می توان از هر سه تعریف بالا استفاده کرد.

مشکلات رایج

هنگامی که نتیجه عملیات modulo دارای علامت سود است (تعریف کوتاه) ، می تواند منجر به اشتباهات شگفت انگیز شود.

به عنوان مثال ، برای آزمایش اگر یک عدد صحیح فرد است ، ممکن است تمایل به آزمایش وجود داشته باشد اگر باقی مانده بر 2 برابر 1 باشد:

bool is_odd ( int n ) {   
    بازگشت n ٪ 2 == 1 ؛     
}

اما در زبانی که modulo دارای علامت تقسیم است ، این نادرست است ، زیرا وقتی n (تقسیم) منفی و فرد باشد ، n mod 2 − 1 و تابع false برمی گرداند.

یک گزینه صحیح این است که آزمایش کنید که باقی مانده 0 نیست (زیرا باقی مانده 0 بدون در نظر گرفتن علائم یکسان است):

bool is_odd ( int n ) {   
    بازگشت n ٪ 2 ! = 0 ؛     
}

جایگزین دیگر استفاده از این واقعیت است که برای هر عدد فرد ، باقی مانده ممکن است 1 یا 1 باشد:

bool is_odd ( int n ) {   
    بازگشت n ٪ 2 == 1 || n ٪ 2 == -1 ؛           
}

مسائل مربوط به عملکرد

عملیات Modulo ممکن است به گونه ای اجرا شود که هر بار تقسیم باقیمانده محاسبه شود. برای موارد خاص ، در برخی سخت افزارها ، جایگزین های سریع تری وجود دارد. به عنوان مثال ، مدول توانهای 2 را می توان به صورت عملیات AND و بیتی بیان کرد (با فرض اینکه x یک عدد صحیح مثبت است یا با استفاده از یک تعریف غیر کوتاه):

x % 2n == x & (2n - 1)

مثال ها:

x % 2 == x & 1
x % 4 == x & 3
x % 8 == x & 7

در دستگاهها و نرم افزارهایی که عملیات بیتی را به طور مlyثرتری نسبت به modulo پیاده سازی می کنند ، این اشکال جایگزین می تواند منجر به محاسبات سریعتر شود. [8]

بهینه سازی های کامپایلر ممکن است عباراتی از فرم را expression % constantکه constantدارای قدرت دو است تشخیص دهد و بطور خودکار آنها را پیاده سازی کند و expression & (constant-1)به برنامه نویس اجازه می دهد بدون شکنندگی از عملکرد کد واضح تری بنویسد. این بهینه سازی ساده برای زبانهایی که نتیجه عملیات modulo دارای علامت تقسیم (شامل C ) است امکان پذیر نیست ، مگر اینکه سود تقسیمی از نوع صحیح بدون علامت باشد. این به این دلیل است که اگر سود سهام منفی باشد ، مدول منفی است ، در حالی که expression & (constant-1)همیشه مثبت خواهد بود. برای این زبانها ، باید معادل به جای آن استفاده شود ، که با استفاده از عملیات بیتی OR ، NOT و AND بیان می شود. x % 2n == x < 0 ? x | ~(2n - 1) : x & (2n - 1)

بهینه سازی برای عملیات مدول کلی کلی نیز با محاسبه تقسیم ابتدا با استفاده از بهینه سازی تقسیم کننده ثابت انجام می شود .

خواص (هویت)

برخی از عملیات مدول را می توان مانند سایر عملیات ریاضی در نظر گرفت یا گسترش داد. این ممکن است در اثبات رمزنگاری ، مانند مبادله کلید Diffie -Hellman مفید باشد .

  • هویت:
  • معکوس:
    • [(- وزارت دفاع N ) + ( وزارت دفاع N )] وزارت دفاع N = 0 .
    • ب -1 وزارت دفاع N نشان دهنده وارون ضربی پیمانه ، تعریف شده است که اگر و تنها اگر ب و N می نسبتا نخست ، که مورد زمانی که در سمت چپ تعریف شده است: [( ب -1 وزارت دفاع N ) ( ب وزارت دفاع N ) ] mod n = 1 .
  • توزیعی:
    • ( + ب ) وزارت دفاع N = [( وزارت دفاع N ) + ( ب وزارت دفاع N )] وزارت دفاع N .
    • AB وزارت دفاع N = [( وزارت دفاع N ) ( ب وزارت دفاع N )] وزارت دفاع N .
  • بخش (تعریف): آ/بmod n = [( a mod n ) ( b −1 mod n )] mod n ، هنگامی که سمت راست تعریف شده است (یعنی زمانی که b و n coprime هستند ) ، و در غیر این صورت تعریف نشده است.
  • ضرب معکوس: [( ab mod n ) ( b −1 mod n )] mod n = a mod n .

در زبان های برنامه نویسی

عملگرهای Modulo به زبانهای برنامه نویسی مختلف
زبان اپراتور عدد صحیح نقطه شناور تعریف
ABAP MOD آره آره اقلیدسی
ActionScript % آره خیر کوتاه شده
آدا mod آره خیر طبقه
rem آره خیر کوتاه شده
الگول 68 ÷×، mod آره خیر اقلیدسی
AMPL mod آره خیر کوتاه شده
APL |[ب] آره خیر طبقه
AppleScript mod آره خیر کوتاه شده
AutoLISP (rem d n) آره خیر کوتاه شده
AWK % آره خیر کوتاه شده
پایه ای Mod آره خیر تعریف نشده
قبل از میلاد مسیح % آره خیر کوتاه شده
C
++
%، div آره خیر کوتاه [c]
fmod(C)
std::fmod(C ++)
خیر آره کوتاه شده [11]
remainder(C)
std::remainder(C ++)
خیر آره گرد شده است
سی شارپ % آره آره کوتاه شده
کلاریون % آره خیر کوتاه شده
تمیز rem آره خیر کوتاه شده
کلوژور mod آره خیر طبقه
rem آره خیر کوتاه شده
COBOL FUNCTION MOD آره خیر طبقه [d]
CoffeeScript % آره خیر کوتاه شده
%% آره خیر طبقه [12]
ColdFusion %، MOD آره خیر کوتاه شده
Common Lisp mod آره آره طبقه
rem آره آره کوتاه شده
کریستال % آره خیر کوتاه شده
د % آره آره کوتاه شده [13]
دارت % آره آره اقلیدسی [14]
remainder() آره آره کوتاه شده [15]
ایفل \\ آره خیر کوتاه شده
اکسیر rem/2 آره خیر کوتاه شده [16]
Integer.mod/2 آره خیر طبقه [17]
نارون modBy آره خیر طبقه
remainderBy آره خیر کوتاه شده
ارلانگ rem آره خیر کوتاه شده
math:fmod/2 خیر آره کوتاه (همان C) [18]
رضایت mod آره خیر طبقه
remainder آره خیر کوتاه شده
F# % آره آره کوتاه شده
عامل mod آره خیر کوتاه شده
FileMaker Mod آره خیر طبقه
چهارم mod آره خیر پیاده سازی تعریف شده است
fm/mod آره خیر طبقه
sm/rem آره خیر کوتاه شده
فورتران mod آره آره کوتاه شده
modulo آره آره طبقه
چشمک زدن mod آره خیر طبقه
GLSL % آره خیر تعریف نشده [19]
mod خیر آره طبقه [20]
GameMaker Studio (GML) mod، % آره خیر کوتاه شده
GDScript (گودو) % آره خیر کوتاه شده
fmod خیر آره کوتاه شده
posmod آره خیر طبقه
fposmod خیر آره طبقه
برو % آره خیر کوتاه شده
math.Mod خیر آره کوتاه شده
گرووی % آره خیر کوتاه شده
هاسکل mod آره خیر طبقه
rem آره خیر کوتاه شده
Data.Fixed.mod'( GHC ) خیر آره طبقه
هاکس % آره خیر کوتاه شده
HLSL % آره آره تعریف نشده [21]
ج |[ب] آره خیر طبقه
جاوا % آره آره کوتاه شده
Math.floorMod آره خیر طبقه
جاوا اسکریپت
TypeScript
% آره آره کوتاه شده
جولیا mod آره خیر طبقه
%، rem آره خیر کوتاه شده
کوتلین %، rem آره آره کوتاه شده [22]
mod آره آره طبقه [23]
ksh % آره خیر کوتاه (همان POSIX sh)
fmod خیر آره کوتاه شده
آزمایشگاه mod آره آره کوتاه شده
LibreOffice =MOD() آره خیر طبقه
لوگو MODULO آره خیر طبقه
REMAINDER آره خیر کوتاه شده
لوآ 5 % آره آره طبقه
لوآ 4 mod(x,y) آره آره کوتاه شده
آزادی پایه MOD آره خیر کوتاه شده
Mathcad mod(x,y) آره خیر طبقه
افرا e mod m (به صورت پیش فرض)، modp(e, m) آره خیر اقلیدسی
mods(e, m) آره خیر گرد شده است
frem(e, m) آره آره گرد شده است
ریاضی Mod[a, b] آره خیر طبقه
متلب mod آره خیر طبقه
rem آره خیر کوتاه شده
ماکسیما mod آره خیر طبقه
remainder آره خیر کوتاه شده
زبان جاسازی شده مایا % آره خیر کوتاه شده
مایکروسافت اکسل =MOD() آره آره طبقه
مینیتاب MOD آره خیر طبقه
Modula-2 MOD آره خیر طبقه
REM آره خیر کوتاه شده
اوریون # آره خیر طبقه
Netwide Assembler ( NASM ، NASMX ) %، div(بدون امضا) آره خیر N/A
%% (امضاء شده) آره خیر پیاده سازی تعریف شده [24]
نیم mod آره خیر کوتاه شده
اوبرون MOD آره خیر کف مانند [e]
هدف-ج % آره خیر کوتاه (همان C99)
شی پاسکال ، دلفی mod آره خیر کوتاه شده
OCaml mod آره خیر کوتاه شده
mod_float خیر آره کوتاه شده
اکوم \ آره خیر کوتاه شده
پاسکال (ISO -7185 و -10206) mod آره خیر اقلیدسی مانند [f]
کد برنامه نویسی پیشرفته ( PCA ) \ آره خیر تعریف نشده
پرل % آره خیر طبقه [g]
POSIX::fmod خیر آره کوتاه شده
فیکس mod آره خیر طبقه
remainder آره خیر کوتاه شده
پی اچ پی % آره خیر کوتاه شده
fmod خیر آره کوتاه شده
PIC BASIC Pro \\ آره خیر کوتاه شده
PL/I mod آره خیر طبقه (ANSI PL/I)
PowerShell % آره خیر کوتاه شده
کد برنامه نویسی ( PRC ) MATH.OP - 'MOD; (\)' آره خیر تعریف نشده
پیش رفتن modulo آره خیر کوتاه شده
Prolog ( ISO 1995 ) mod آره خیر طبقه
rem آره خیر کوتاه شده
PureBasic %، Mod(x,y) آره خیر کوتاه شده
PureScript `mod` آره خیر طبقه
داده های خالص % آره خیر کوتاه (همان C)
mod آره خیر طبقه
پایتون % آره آره طبقه
math.fmod خیر آره کوتاه شده
Q# % آره خیر کوتاه شده [26]
R %% آره خیر طبقه
راکت تنیس modulo آره خیر طبقه
remainder آره خیر کوتاه شده
راکو % خیر آره طبقه
RealBasic MOD آره خیر کوتاه شده
دلیل mod آره خیر کوتاه شده
رکس // آره آره کوتاه شده
RPG %REM آره خیر کوتاه شده
یاقوت %، modulo() آره آره طبقه
remainder() آره آره کوتاه شده
زنگ % آره آره کوتاه شده
rem_euclid() آره آره اقلیدسی [27]
SAS MOD آره خیر کوتاه شده
مقیاس % آره خیر کوتاه شده
طرح modulo آره خیر طبقه
remainder آره خیر کوتاه شده
طرح R 6 RS mod آره خیر اقلیدسی [28]
mod0 آره خیر گرد [28]
flmod خیر آره اقلیدسی
flmod0 خیر آره گرد شده است
خراش mod آره خیر طبقه
mod خیر آره کوتاه شده
دانه 7 mod آره آره طبقه
rem آره آره کوتاه شده
SenseTalk modulo آره خیر طبقه
rem آره خیر کوتاه شده
sh(POSIX) (شامل bash ، mksh و ...) % آره خیر کوتاه (همان C) [29]
گفتگوی کوچک \\ آره خیر طبقه
rem: آره خیر کوتاه شده
ضربه محکم و ناگهانی! mod آره خیر طبقه
چرخش // آره خیر طبقه
استحکام % آره خیر طبقه
SQL ( SQL: 1999 ) mod(x,y) آره خیر کوتاه شده
SQL ( SQL: 2011 ) % آره خیر کوتاه شده
استاندارد ML mod آره خیر طبقه
Int.rem آره خیر کوتاه شده
Real.rem خیر آره کوتاه شده
استاتا mod(x,y) آره خیر اقلیدسی
سریع % آره خیر کوتاه شده
truncatingRemainder(dividingBy:) خیر آره کوتاه شده
Tcl % آره خیر طبقه
گشتاور % آره خیر کوتاه شده
تورینگ mod آره خیر طبقه
Verilog (2001) % آره خیر کوتاه شده
VHDL mod آره خیر طبقه
rem آره خیر کوتاه شده
VimL % آره خیر کوتاه شده
ویژوال بیسیک Mod آره خیر کوتاه شده
WebAssembly i32.rem_s، i64.rem_s آره خیر کوتاه شده
مونتاژ x86 IDIV آره خیر کوتاه شده
XBase ++ % آره آره کوتاه شده
Mod() آره آره طبقه
اثبات کننده قضیه Z3 div، mod آره خیر اقلیدسی

علاوه بر این ، بسیاری از سیستم های کامپیوتری divmodعملکردی را ارائه می دهند که باعث می شود ضریب و بقیه به طور همزمان تولید شود. مثالها عبارتند از معماری x86 را IDIVآموزش، زبان برنامهنویسی C div()تابع، و پایتون را divmod()تابع.

کلیات

Modulo با افست

گاهی اوقات آن را برای نتیجه مفید است پیمانه N به دروغ نیست بین 0 و N - 1 ، اما بین برخی از تعداد د و د + N - 1 . در این حالت ، d را offset می نامند . به نظر نمی رسد به یک نت نویسی استاندارد برای این عمل، بنابراین اجازه دهید ما به طور آزمایشی استفاده وزارت دفاع د N . بنابراین ما تعریف زیر را داریم: [30] x = a mod d n فقط در مورد dxd + n - 1 و x mod n = a mod n . واضح است که عملیات مدول معمول مربوط به صفر افست است: a mod n = a mod 0 n . عملکرد مدول با افست به عملکرد کف به شرح زیر است:

(برای دیدن این ، اجازه دهید به ابتدا نشان می دهیم که x mod n = a mod n . این به طور کلی درست است که ( + BN ) وزارت دفاع N = وزارت دفاع N برای تمام اعداد صحیح ب ؛ بنابراین ، این امر در مورد خاص زمانی نیز صادق است؛ اما این بدان معناست که، چیزی که می خواستیم ثابت کنیم. باقی مانده است نشان داده شود که dxd + n - 1 . بگذارید k و r اعداد صحیح باشند به گونه ای که a - d = kn + r با 0 ≤ rn - 1 ( بخش اقلیدسی را ببینید ). سپس، بدین ترتیب به حالا 0 ≤ rn - 1 را بردارید و d را به دو طرف اضافه کنید ، dd + rd + n - 1 . اما ما دیدیم که x = d + r ، بنابراین کار ما تمام شده است. )

مدول با افست a mod d n در Mathematica به عنوان اجرا می شود Mod[a, n, d] . [30]

پیاده سازی سایر تعاریف مدول با استفاده از اختصار

با وجود ظرافت ریاضی تقسیم طبقه کنوت و تقسیم اقلیدسی ، عموماً یافتن مدول بر اساس تقسیم بندی کوتاه در زبان های برنامه نویسی بسیار رایج است. Leijen الگوریتم های زیر را برای محاسبه دو تقسیم با تقسیم صحیح کوتاه ارائه می دهد: [6]

/ * divod اقلیدسی و Floored ، به سبک ldiv C () */
typedef struct {  
  / * این ساختار بخشی از C stdlib.h است ، اما برای وضوح در اینجا تکثیر می شود */
  long int quot ؛  
  long int rem ؛  
} ldiv_t ؛ 

/ * تقسیم اقلیدسی */
درون خطی ldiv_t ldivE ( طولانی numer ، طولانی DENOM ) {      
  /* زبانهای C99 و C ++ 11 هر دوی اینها را به عنوان کوتاه کننده تعریف می کنند. */
  طولانی Q = numer / DENOM ؛     
  طولانی R = numer ٪ DENOM ؛     
  if ( r < 0 ) {    
    اگر ( DENOM > 0 ) {    
      q = q - 1 ؛    
      r = r + اسم ؛    
    } دیگری {  
      q = q + 1 ؛    
      r = r - اسم ؛    
    }
  }
  بازگشت ( ldiv_t ) {. quot = q ، . rem = r       
}

/ * طبقه طبقه */
درون خطی ldiv_t ldivF ( طولانی numer ، طولانی DENOM ) {      
  طولانی Q = numer / DENOM ؛     
  طولانی R = numer ٪ DENOM ؛     
  اگر (( R > 0 && DENOM < 0 ) || ( R < 0 && DENOM > 0 )) {                
    q = q - 1 ؛    
    r = r + اسم ؛    
  }
  بازگشت ( ldiv_t ) {. quot = q ، . rem = r       
}

توجه داشته باشید که برای هر دو مورد ، بقیه را می توان مستقل از ضریب محاسبه کرد ، اما برعکس. عملیات در اینجا برای صرفه جویی در فضای صفحه ترکیب شده است ، زیرا شاخه های منطقی یکسان هستند.

همچنین ببینید

Notes

  1. ^ Mathematically, these two choices are but two of the infinite number of choices available for the inequality satisfied by a remainder.
  2. ^ a b Argument order reverses, i.e., α|ω computes , the remainder when dividing ω by α.
  3. ^ C99 and C++11 define the behavior of % to be truncated.[9] The standards before then leave the behavior implementation-defined.[10]
  4. ^ As implemented in ACUCOBOL, Micro Focus COBOL, and possible others.
  5. ^ Divisor must be positive, otherwise undefined.
  6. ^ As discussed by Boute, ISO Pascal's definitions of div and mod do not obey the Division Identity of D = d · (D / d) + D % d, and are thus fundamentally broken.
  7. ^ Perl usually uses arithmetic modulo operator that is machine-independent. For examples and exceptions, see the Perl documentation on multiplicative operators.[25]

References

  1. ^ "The Definitive Glossary of Higher Mathematical Jargon: Modulo". Math Vault. 2019-08-01. Retrieved 2020-08-27.
  2. ^ Weisstein, Eric W. "Congruence". mathworld.wolfram.com. Retrieved 2020-08-27.
  3. ^ Caldwell, Chris. "residue". Prime Glossary. Retrieved August 27, 2020.
  4. ^ Knuth, Donald. E. (1972). The Art of Computer Programming. Addison-Wesley.
  5. ^ Boute, Raymond T. (April 1992). "The Euclidean definition of the functions div and mod". ACM Transactions on Programming Languages and Systems. ACM Press (New York, NY, USA). 14 (2): 127–144. doi:10.1145/128861.128862. hdl:1854/LU-314490. S2CID 8321674.
  6. ^ a b Leijen, Daan (December 3, 2001). "Division and Modulus for Computer Scientists" (PDF). Retrieved 2014-12-25. Cite journal requires |journal= (help)
  7. ^ Peterson, Doctor (5 July 2001). "Mod Function and Negative Numbers". Math Forum - Ask Dr. Math. Archived from the original on 2019-10-22. Retrieved 22 October 2019.
  8. ^ Horvath, Adam (July 5, 2012). "Faster division and modulo operation - the power of two".
  9. ^ "C99 specification (ISO/IEC 9899:TC2)" (PDF). 2005-05-06. sec. 6.5.5 Multiplicative operators. Retrieved 16 August 2018.
  10. ^ "ISO/IEC 14882:2003: Programming languages – C++". International Organization for Standardization (ISO), International Electrotechnical Commission (IEC). 2003. sec. 5.6.4. the binary % operator yields the remainder from the division of the first expression by the second. .... If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined Cite journal requires |journal= (help)
  11. ^ "ISO/IEC 9899:1990: Programming languages – C". ISO, IEC. 1990. sec. 7.5.6.4. The fmod function returns the value x - i * y, for some integer i such that, if y is nonzero, the result as the same sign as x and magnitude less than the magnitude of y. Cite journal requires |journal= (help)
  12. ^ CoffeeScript operators
  13. ^ "Expressions - D Programming Language". dlang.org. Retrieved 2021-06-01.
  14. ^ "operator % method - num class - dart:core library - Dart API". api.dart.dev. Retrieved 2021-06-01.
  15. ^ "remainder method - num class - dart:core library - Dart API". api.dart.dev. Retrieved 2021-06-01.
  16. ^ "Kernel — Elixir v1.11.3". hexdocs.pm. Retrieved 2021-01-28.
  17. ^ "Integer — Elixir v1.11.3". hexdocs.pm. Retrieved 2021-01-28.
  18. ^ "Erlang -- math". erlang.org. Retrieved 2021-06-01.
  19. ^ "GLSL Language Specification, Version 4.50.7" (PDF). section 5.9 Expressions. If both operands are non-negative, then the remainder is non-negative. Results are undefined if one or both operands are negative.
  20. ^ "GLSL Language Specification, Version 4.50.7" (PDF). section 8.3 Common Functions.
  21. ^ "Operators". Microsoft. Retrieved 2021-07-19. The % operator is defined only in cases where either both sides are positive or both sides are negative. Unlike C, it also operates on floating-point data types, as well as integers.
  22. ^ "rem - Kotlin Programming Language". Kotlin. Retrieved 2021-05-05.
  23. ^ "mod - Kotlin Programming Language". Kotlin. Retrieved 2021-05-05.
  24. ^ "Chapter 3: The NASM Language". NASM - The Netwide Assembler version 2.15.05.
  25. ^ Perl documentation
  26. ^ QuantumWriter. "Expressions". docs.microsoft.com. Retrieved 2018-07-11.
  27. ^ "F32 - Rust".
  28. ^ a b r6rs.org
  29. ^ "Shell Command Language". pubs.opengroup.org. Retrieved 2021-02-05.
  30. ^ a b "Mod". Wolfram Language & System Documentation Center. Wolfram Research. 2020. Retrieved April 8, 2020.

External links

  • Modulorama, animation of a cyclic representation of multiplication tables (explanation in French)