算術オーバーフロー

算術オーバーフロー(さんじゅつオーバーフロー、: arithmetic overflow)あるいは単にオーバーフローは、デジタルコンピュータにおいて、演算結果がレジスタの表せる範囲や記憶装置上の格納域に記録できる範囲を超えてしまう現象、またはその結果レジスタ等に格納される値を意味する。オーバーフローは、本来演算結果を格納する場所とは違う場所に格納される場合がある。溢れあふれ)とも言う。

符号無し表現の加減算では、最上位桁より上の桁(存在しない桁)への繰り上がり(キャリー)や、おなじく存在しない桁からの繰り下がり(ボロー)が起きることが溢れである。フラグに保存され、キャリーフラグという名が付けられていることが多い。

加算器2の補数を使って減算を行っていて、加算器のキャリー入出力をそのままとしている場合、繰り下がり(ボロー)のなかった場合にフラグが立ち、繰り下がりがあった場合にはフラグが立たない、というロジックになる(6502POWERARMPICなど)。加算器#減算器も参照。

符号付き表現の、特に2の補数表現では、加減算のビット操作は符号無し表現のそれと全く同じであるが、最上位桁より上の桁との繰り上がりや繰り下がりではなく、最上位桁への繰り上がりや繰り下がりが溢れであることがある。最上位桁への繰り上がりや繰り下がりと同時に最上位桁より上の桁への繰り上がりや繰り下がりがあったら溢れではない。これのフラグはオーバーフローフラグという名が付けられていることが多い。

3ビットで+1を繰り返した場合でそれぞれの例を示す。

  • 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 →(X)→ 0 ...
  • 0 → 1 → 2 → 3 →(Y)→ -4 → -3 → -2 → -1 →(YX)→ 0 ...

(X)と(YX)で最上位桁より上の桁への繰り上がりが起きている。(Y)と(YX)では最上位桁への繰り上がりが起きている。

浮動小数点数では、演算の結果、指数部が最大より大きくなった場合がオーバーフローで、結果が±(正または負の無限大、+INFあるいは-INF)になる。

オーバーフローの処理方法

オーバーフローの処理方法はいくつかある。

設計時の配慮
正しいデータ型(大きさと符号の有無)を選択する。
発生を未然に防ぐ
演算を注意深く並べ、必要に応じてオペランドを事前チェックすることによって、演算結果がオーバフローすることを防止する。
発生時の処理
オーバフロー発生時にその場で処理をする。例えば、2バイトの数値を1バイト毎の加算で加算する場合、まず下の桁(バイト)を加算して次に上の桁を加算する。このとき下の桁の加算でキャリーが発生した場合、上の桁の加算にキャリーのぶんも加算しなければならない。CPUには一般にそのような場合を検出する方法があり(ステータスレジスタ参照)、レジスタより大きな数の演算をサポートできるようになっている。例えば、Intel 8086の場合、オーバーフロー検知用のINTO 命令英語版を実行することでオーバーフローフラグをチェックし、セットされている場合には、オーバーフロー例外を発生する[1]
伝播
格納できる範囲を超えた値の場合、オーバーフローであることを示す特別な値を格納しておき、その後の演算に伝播させていく。長い計算の最後に値をチェックすればオーバフローが発生したことがわかるので、このような扱い方が便利な場合もある。特にFPUによる浮動小数点数の演算でよく使われる。
無視
最もよくある手法。しかし、結果が不正になるだけでなく、セキュリティホールの原因となることもある。

C言語およびC++では、符号付き整数のオーバーフローは未定義動作を引き起こす[2][3]。そのため、正しい作法にのっとったアプリケーションコードでは、オーバーフローの発生を未然に防がなければならない。符号無し整数はオーバーフローせず、ラップアラウンド: wraparound)と呼ばれる動作になることが規定されているが、メモリアドレスに関わるコードや、セキュリティ上重要な意味を持つコードではラップアラウンドも避けるべきとされている[4]

プログラミング環境と算術オーバーフロー

プログラミング言語や実行環境の中には、算術オーバーフローを検出したときに例外をスローするなど、エラーハンドリングを容易にしてくれるものもある。

C#ではcheckedキーワード(checkedステートメントやchecked演算子)を使うことで、整数演算によってオーバーフローが発生したときSystem.OverflowExceptionがスローされるようになる[5]。ただし浮動小数点演算の場合はスローされない。他にも、整数型Tの引数を受け取るSystem.Math.Abs()メソッドのオーバーロードは、T.MinValueに対してSystem.OverflowExceptionをスローする[6]

JavaはC#のcheckedに相当する機能を直接持たない。ただし、Java 8でMathクラスに追加されたExactメソッドを使うと、オーバーフローが発生したときにArithmeticExceptionがスローされる。

ISO C/C++では、SIGFPEシグナルがサポートされている[7]。シグナルハンドラーを設定すると、POSIXではオーバーフロー発生時にFPE_INTOVFまたはFPE_FLTOVFのエラーコードを伴うシグナルが発生する[8]C++BuilderではFPE_INTOVFLOWまたはFPE_OVERFLOWとなる[9]Microsoft Visual C++では整数オーバーフローによるシグナルは発生せず、浮動小数点数オーバーフロー発生時に_FPE_OVERFLOWのエラーコードを伴うシグナルが発生する[10]。ただし、SIGFPEのシグナルハンドラーからは復帰するべきではなく、そのまま終了するべきとされている[11]

C99およびC++11では、直前の演算によって浮動小数点例外が発生したかどうかをチェックできるテスト関数fetestexcept()を標準化している[12][13]。オーバーフローを検出するにはテストビットとしてFE_OVERFLOWを使用する[14]

Microsoft Visual C++のランタイムライブラリは、デフォルトではすべての浮動小数点例外をマスクしているが、_controlfp_s()関数などを使ってオーバーフローの浮動小数点例外を有効化すると、Microsoft Windows固有のエラー処理機構である構造化例外[15]をスローするようになる[16]。なお、制御ワードの設定はスレッドごとに管理されているため、浮動小数点例外を有効化する場合はスレッドごとに設定が必要となる[17]

DelphiC++Builderでは、浮動小数点演算でオーバーフローが発生した場合、System.SysUtils.EOverflowをスローする[18]。ただし、ARMアーキテクチャは浮動小数点例外をサポートしないため、すべての浮動小数点例外がマスクされている[19]。整数演算でオーバーフローが発生した場合、System.SysUtils.EIntOverflowをスローするが、プロジェクトのオーバーフローチェックが有効になっている必要がある[20]

その他

  • 1996年にあったアリアン5の事故は、オーバーフローを適切に扱っていなかったことが原因である[21]
  • 電卓の画面は一般的に十進数で表示されるが、電卓でも計算の結果オーバーフローが発生する場合がある(8桁電卓の99999999+1など)。これについての詳細は電卓#エラー表示についてを参照。

脚注

  1. ^ 田辺皓正編著『マイクロコンピュータシリーズ15 8086マイクロコンピュータ』丸善株式会社、1983年4月30日、83頁。 
  2. ^ MSC15-C. 未定義の動作に依存しない
  3. ^ Tell Programmers About Signed Integer Overflow Behavior
  4. ^ INT30-C. 符号無し整数の演算結果がラップアラウンドしないようにする
  5. ^ checked および unchecked ステートメント - オーバーフローチェック コンテキストを制御します - C# | Microsoft Learn
  6. ^ Math.Abs Method (System) | Microsoft Learn
  7. ^ SIGTERM, SIGSEGV, SIGINT, SIGILL, SIGABRT, SIGFPE - cppreference.com
  8. ^ <signal.h> - IEEE Std 1003.1-2017
  9. ^ signal(C RTL) - RAD Studio
  10. ^ _fpreset | Microsoft Learn
  11. ^ SIG35-C. シグナルハンドラ SIGSEGV、SIGILL、SIGFPE から復帰しない
  12. ^ FLP03-C. 浮動小数点エラーを検知して処理する
  13. ^ fetestexcept - cpprefjp C++日本語リファレンス
  14. ^ FE_OVERFLOW - cpprefjp C++日本語リファレンス
  15. ^ Structured Exception Handling - Win32 apps | Microsoft Learn
  16. ^ _controlfp_s | Microsoft Learn
  17. ^ Top Issues for Windows Titles - Win32 apps | Microsoft Learn
  18. ^ 浮動小数点例外 - RAD Studio
  19. ^ 浮動小数点演算について - RAD Studio
  20. ^ System.SysUtils.EIntOverflow - RAD Studio API Documentation
  21. ^ 失敗百選-アリアン5型ロケット爆発事故

関連項目

Read other articles:

William C. deMille William C. deMille, all'anagrafe William Churchill de Mille (Washington, 25 luglio 1878 – Playa del Rey, 8 marzo 1955), è stato un drammaturgo, regista, sceneggiatore e produttore cinematografico statunitense. Diresse e sceneggiò pellicole durante l'epoca d'oro del cinema muto statunitense, producendo anche qualche film. Fu uno dei fondatori della Motion Picture Directors Association e poi della USC School of Cinematic Arts. Indice 1 Biografia 1.1 Carriera teatrale 1.2 ...

 

 

Katedral GaryKatedral Para Malaikat KudusCathedral of the Holy AngelsKatedral Gary41°35′55.99″N 87°20′55.93″W / 41.5988861°N 87.3488694°W / 41.5988861; -87.3488694Koordinat: 41°35′55.99″N 87°20′55.93″W / 41.5988861°N 87.3488694°W / 41.5988861; -87.3488694Lokasi640 Tyler StreetGary, IndianaNegaraAmerika SerikatDenominasiGereja Katolik RomaSitus webgarycathedral.orgSejarahDidirikanSeptember 1906 (paroki)PendiriMsgr. F. Thom...

 

 

Biografi ini tidak memiliki sumber tepercaya sehingga isinya tidak dapat dipastikan. Bantu memperbaiki artikel ini dengan menambahkan sumber tepercaya. Materi kontroversial atau trivial yang sumbernya tidak memadai atau tidak bisa dipercaya harus segera dihapus.Cari sumber: Aladin S. Mengga – berita · surat kabar · buku · cendekiawan · JSTOR (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Aladin S. Mengga Wakil Gubernur Sulawesi Bar...

County in Minnesota, United States Parts of this article (those related to Demographics) need to be updated. Please help update this article to reflect recent events or newly available information. (March 2020) County in MinnesotaHouston CountyCountyHouston County Courthouse in CaledoniaLocation within the U.S. state of MinnesotaMinnesota's location within the U.S.Coordinates: 43°40′N 91°29′W / 43.67°N 91.49°W / 43.67; -91.49Country United StatesState ...

 

 

Village in Maharashtra This article is an orphan, as no other articles link to it. Please introduce links to this page from related articles; try the Find link tool for suggestions. (January 2018) Village in Maharashtra, IndiaSoundevillageCountry IndiaStateMaharashtraDistrictSolapur districtLanguages • OfficialMarathiTime zoneUTC+5:30 (IST) Sounde is a village in the Karmala taluka of Solapur district in Maharashtra state, India. Demographics Covering 1,365 hectares (3,370 ac...

 

 

Taman Nasional Tesso Nilo Bayi gajah Sumatra di Taman Tesso Nilo Taman Nasional Tesso Nilo adalah sebuah taman nasional yang terletak di Kabupaten Pelalawan, Provinsi Riau. Di dalamnya terdapat sedikitnya 360 jenis flora, 107 jenis burung, 50 jenis ikan, 23 jenis mamalia, 18 jenis amfibi, 15 jenis reptil dan 3 jenis primata. Ekosistemnya termasuk hutan hujan tropika yang menjadi kawasan perlindungan gajah berjumlah 60-80 ekor gajah. Kawasan Taman Nasional Tesso Nilo pertama kali ditetapkan ol...

Questa voce o sezione sull'argomento Competizioni calcistiche non è ancora formattata secondo gli standard. Commento: Si invita a seguire il modello di voce Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Ligue 1 2010-2011Ligue 1 Orange 2010-2011 Competizione Ligue 1 Sport Calcio Edizione 73ª Organizzatore LFP Date dal 7 agosto 2010all'11 maggio 2011 Luogo  Francia Partecipanti 20 Risultati Vincitore Lilla(3º ...

 

 

artikel ini perlu dirapikan agar memenuhi standar Wikipedia. Tidak ada alasan yang diberikan. Silakan kembangkan artikel ini semampu Anda. Merapikan artikel dapat dilakukan dengan wikifikasi atau membagi artikel ke paragraf-paragraf. Jika sudah dirapikan, silakan hapus templat ini. (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Tradisi patekoan, membagikan minuman teh secara gratis di kawasan Glodok, Batavia. Tanaman penghasil teh (Camellia sinensis) pertama kali masuk ke...

 

 

Questa voce o sezione sull'argomento informatica non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Logo Il digital object identifier (acronimo DOI, in italiano Identificatore digitale di un oggetto[1]) è uno standard che consente l'identificazione duratura e univoca di oggetti di qualsiasi tipo[...

French-Canadian climatologist (born 1966) Corinne Le QuéréCBE FRSLe Quéré in 2016BornJuly 1966 (age 57)Quebec, CanadaAlma mater University of Montreal McGill University University of Paris VI Scientific careerFieldsClimatologyInstitutionsUniversity of East Anglia Websitepeople.uea.ac.uk/c_lequere Marie Corinne Lyne Le Quéré[1] CBE FRS (born July 1966) is a Canadian scientist. She is Royal Society Research Professor of Climate Change Science at the Universi...

 

 

この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: コルク – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2017年4月) コルクを打ち抜いて作った瓶の栓 コルク(木栓、�...

 

 

Questa voce sull'argomento aziende britanniche dei trasporti è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Avanti West Coast Stato Regno Unito Fondazione2019 a Londra Sede principaleLondra FirstGroup (70%) Trenitalia (30%) GruppoFirstGroup plc Persone chiavePhil Whittingham (AD)[1] SettoreTrasporto Prodottitrasporto ferroviario Sito webwww.avantiwestcoast.co.uk/ Modifica dati su Wikidata · Manuale Avanti West Coast è una soci...

此條目可能包含不适用或被曲解的引用资料,部分内容的准确性无法被证實。 (2023年1月5日)请协助校核其中的错误以改善这篇条目。详情请参见条目的讨论页。 各国相关 主題列表 索引 国内生产总值 石油储量 国防预算 武装部队(军事) 官方语言 人口統計 人口密度 生育率 出生率 死亡率 自杀率 谋杀率 失业率 储蓄率 识字率 出口额 进口额 煤产量 发电量 监禁率 死刑 国债 ...

 

 

Disambiguazione – Se stai cercando altri significati, vedi Luigi Gonzaga (disambigua). San Luigi GonzagaFrancisco Goya, Luis Gonzaga, 1798. Religioso  NascitaCastiglione delle Stiviere, 9 marzo 1568 MorteRoma, 21 giugno 1591 (23 anni) Venerato daChiesa cattolica Beatificazione19 ottobre 1605, da papa Paolo V Canonizzazione31 dicembre 1726, da papa Benedetto XIII Ricorrenza21 giugno Attributicrocifisso, giglio, teschio e flagello Patrono diRegno delle Due Sicilie, giovani, sc...

 

 

فوز أرتورو فيدال بجائزة أفضل لاعب في المباراة أفضل لاعب في المباراة أو رجل المباراة جائزة تمنح لللاعب الذي يقدم أفضل أداء إيجابي في المباراة، ويتم اختيار اللاعب من قبل النقاد أو أحد الرعاة الرسميين في البطولة[1]، وقد تمنح من قبل الجماهير أيضا، وقد تمنح لأي لاعب قدَّم أد...

Pour les articles homonymes, voir Quinn. Quinn Oaxaca est un nom espagnol. Le premier nom de famille, paternel, est Quinn ; le second, maternel, souvent omis, est Oaxaca. Anthony Quinn Anthony Quinn vers 1955. Données clés Nom de naissance Manuel Antonio Rodolfo Quinn Oaxaca Surnom Anthony Quinn Naissance 21 avril 1915Chihuahua (Mexique) Nationalité Mexicaine Américaine Décès 3 juin 2001 (à 86 ans)Boston (Massachusetts, États-Unis) Profession ActeurProducteurRéalisateurArt...

 

 

Pančevo Entidad subnacional BanderaEscudo PančevoLocalización de Pančevo en Serbia PančevoLocalización de Pančevo en VoivodinaCoordenadas 44°52′26″N 20°39′07″E / 44.873888888889, 20.651944444444Entidad Ciudad de Serbia • País  SerbiaSuperficie   • Total 148,8 km² Altitud   • Media 80 m s. n. m.Población (2022)   • Total 73 401 hab. • Densidad 493,29 hab./km²Huso horario UTC+01:00Có...

 

 

نيبال ، أو رسميا جمهورية نيبال الديمقراطية الاتحادية (بالنيبالية: नेपाल) هي دولة تقع في جبال الهملايا، بين الهند والصين، ولاتطل على بحار خارجية. وهي جمهورية بدءاً من 28 مايو 2008. نيبال إحدى الدول الصغرى بشبه القارة الهندية، قلّما يسمع عنها العالم بسبب موقعها المنعزل ووعور...

この項目「グアテマラ総督領」は翻訳されたばかりのものです。不自然あるいは曖昧な表現などが含まれる可能性があり、このままでは読みづらいかもしれません。(原文:en:Captaincy General of Guatemala) 修正、加筆に協力し、現在の表現をより自然な表現にして下さる方を求めています。ノートページや履歴も参照してください。(2022年3月) この記事には参考文献や外�...

 

 

هذه المقالة تحتاج للمزيد من الوصلات للمقالات الأخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (مايو 2016) ليس إرويس تقسيم إداري البلد  هايتي[1] التقسيم الأعلى دائرة آنس هينولت  خ...