オーバーフロー

1 ななしのよっしん
2011/09/25(日) 06:32:06 ID: ZlYtWsINfG
悪いな、童貞なんだ。
2 ななしのよっしん
2012/04/26(木) 01:39:00 ID: zr3Bpu6tnL
エレナアアアアアアアアア!!!!!
3 ななしのよっしん
2012/11/11(日) 21:48:05 ID: Yve7sLqs8N
なんだかんだでいまだに代表的なバグとして君臨してる存在
4 ななしのよっしん
2012/11/27(火) 14:42:01 ID: ohDlX1S5up
838861
8逃げ
5 ななしのよっしん
2013/03/19(火) 15:18:46 ID: 7ev0gcUVIC
数値が0未満になっていきなり大きい数字になることもオーバーフローなんだっけ
6 ななしのよっしん
2013/09/07(土) 23:44:31 ID: eDONa0sjqv
>>5
その例だとオーバーフローにはならない。
たとえば8bitの場合、-128~+127を表現しようとしているときに +127を上回ったり -128を下回ったときにオーバーフローが起こる。
0~+255 を表現しているときに範囲をえるのはオーバーフローにはならない。(厳密にはCPUや処理系依存する)

ちなみにオーバーフローしたときに、数値が一回転してプラスからマイナス(あるいは逆)に変化してしまうような現は、ラップアラウンドという。
これは >>5 の例のような、オーバーフローが起こらない例でもそう呼ぶ。


7 ななしのよっしん
2014/04/19(土) 03:31:12 ID: 43JUyAI94G
>>6wikipedia読んでなんとなくわかったぞ
符号なしの桁上りの場合、キャリーってとこに格納されてまともに計算される(これが多分>>6の言うCPUや処理系
けど符号付きは辺の桁をえず、且つ辺の桁に上がる場合に反対の符号しかないから反転する

>>6で言うと1足して「+128」にしたいのに、128って数字がマイナスにしかない
だから「-128」にしちゃうんだけど、符号なしとした場合正常と判断されるからおかしくなる、と


これあってんのか?
8 ななしのよっしん
2015/09/21(月) 15:20:52 ID: e+/yzymz1t
>>5ケースは数値が0未満、つまり細かすぎる値になって大きな値に変化するのだから、
アンダーフローだと思われる
なおオーバーフローアンダーフローコンピュータが仕組み上限を扱えない以上、くなる事は
9 ななしのよっしん
2016/03/21(月) 12:33:55 ID: axA9XApyGa
+1する場合を考えてみる

符号付き
・(0) 0111 1111 → (0) 1000 0000 : 127 → -128 だから異常
・(0) 1111 1111 → (1) 0000 0000 : -1 → 0 だから正常

符号
・(0) 0111 1111 → (0) 1000 0000 : 127128 だから正常
・(0) 1111 1111 → (1) 0000 0000 : 255 → 0 だから異常

矢印が逆の場合(-1)も同様
符号付きでは、8bitに収まっていてもループしてしまう反面、9bitを使うのは問題ない
10 ななしのよっしん
2016/04/29(金) 15:31:34 ID: B2jvKzXH5K
この記事的に言えば、1がである以上、想定外の個所に負数ができてひっくり返る現オーバーフローとは言わないだろうな
アンダーフローはそもそも言葉として意味が通らないし、どこぞが定義した正式な用ってわけでもないから適当でいいんじゃね
11 ななしのよっしん
2016/05/17(火) 23:54:28 ID: bT/IclfNal
アンダーフローは定義されている術だよ
浮動小数点数において、演算結果の絶対値が小さくなりすぎて0で表現されることをいう

整数演算において、結果の表現範囲をえてしまうこと(によって表現可な別の値になってしまうこと)が算術オーバーフロー
故に符号整数で、演算結果が負になってラップアラウンドするのもオーバーフロー
12 ななしのよっしん
2016/05/28(土) 12:01:41 ID: VK5eSeum0L
まあ少なくとも仕事ではアンダーフローなんて言葉使わないなあ。
昔にべれば、特にオブジェクト指向系の言でのオーバーフローによるバグはかなり少なくなってると思う。
ビジュアル化の流れが強くなっている今日では、座標系の変数で発生しやすいかもしれない。
デバイスから取得したアナログ値を扱うときはみんなオーバーフローに注意するが、
プログラム内だけで完結する物理演算変数でのオーバーフロー想定ができていないケースは多いと思う
13 nの3乗
2016/09/13(火) 18:36:44 ID: Hyu+PAfEkl
2038年問題を解決する大きなカギとなりそうですね・・・
14 ななしのよっしん
2016/10/26(水) 22:25:26 ID: n8egFf9XdR
たっぷりと浴槽にためたお湯に使ったときに起こること

オーバー風呂ー……
15 ななしのよっしん
2016/11/17(木) 21:46:15 ID: 3UYkhAAvsF
>>sm24090545exit_nicovideo
16 ななしのよっしん
2017/01/28(土) 10:47:55 ID: d30fbrclfi
>>14 オーフーローバー浸しになるな
17 ななしのよっしん
2018/07/17(火) 01:41:02 ID: lThB0KxHve
残機が128になる
→残機の変数は符号つき8bitなので「-128」と読まれる
ミスすると「こいつ残機0以下だな」と処理されて即ゲームオーバー
18 ななしのよっしん
2019/01/24(木) 20:22:12 ID: ApBalUYVLw
アンダーフローオーバーフロー以上に簡単に起こるからこれを機に覚えて帰ってね

RPG、たとえばドラクエで攻撃×1.5のダメージを与える技があったとします。
攻撃10はダメージ15です
攻撃5のときダメージは7.5ですが、ドラクエHP表示は小数点を使わないので7になります
端数の0.5はどこに行ったのでしょうか?
0.5を記録しておく領域が用意されていないので0.5は消えて0になりました。これがアンダーフローです。

攻撃の1.5倍のダメージを与える上記の技と弱点属性ならダメージ2倍、が併用されるとき
攻撃5のときダメージが5×1.5×2=7.5×2=15になるとき、アンダーフローは起きていません
ダメージが【5×1.5】×2→【7】×2→14になるとき、アンダーフローが起きています。0.5が復号されず消えたままになってるんですね

なおコンピュータ2進数なので、十進数の0.1を内部で表すとき2進数表記0.00011001100… と限に続いてしまうので実は必ずアンダーフローが起こっています。
19 ななしのよっしん
2019/03/09(土) 10:55:39 ID: B2jvKzXH5K
その現をどこのバカが何の冗談でアンダーフローと称したのかは知らないが、何の期間が定義した訳でもなく正式な定義はない
オーバーフローと違い、そもそも頭痛が痛いバカ英語なので感から定義も出来ない
なので正解は
20 ななしのよっしん
2019/03/29(金) 08:31:25 ID: 5VDcTQA0x/
>>11とか>>18の言ってる「浮動小数点数が有限桁だから計算時にどうしても発生してしまう誤差情報落ち」って普通桁落ちとか丸め誤差とか打ち切り誤差とか言うんじゃないかなあ
変換に伴う情報落ちはアンダーフローと言わないだろうし
そういう誤差が発生する現あるいは原理のことをアンダーフローっていってるんかな
21 ななしのよっしん
2019/06/13(木) 14:27:18 ID: EHgnrI3eio
コンピュータの中では引き算は「補数の足し算」だから桁あふれの上下を区別する必要がないんだよね。(結局上位1ビット分あふれる)

急上昇ワード