20時限目

 
 

396牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:43 ID:mvDMRy2v
[1/18]
   (今日はコンピュータの数値計算のお話)
━O━━━━━━━━━━━━━━━━━━━━━━━━━━
  o  コンピュータにおける実数の扱いには次の2種類があります
  。   ・ 整数
  ,__ ・ 浮動小数点
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 実数だから虚数は除いての話ですね。
    \____               ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄
           | ところで下の浮動小数点って何ですか?
          \_________________

397牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:44 ID:mvDMRy2v
[2/18]
   (ちゃんと説明するのでご心配なく)
━O━━━━━━━━━━━━━━━━━━━━━━━━━
  o  浮動小数点とは次の3要素からなる数のこと
  。    ・ 正負の符号
   .     ・ 1以上基数未満の小数(仮数と呼ぶ)
  ,__  ・ 基数の累乗(指数と呼ぶ)
  iii■∧  / ※ 基数は10進数なら10, 2進数なら2, n進数ならn
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚;)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ==========∧====
                   / ̄ ̄ ̄   ̄ ̄ ̄ ̄
                    | え?えーと……。
                ∧ \    
       / ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        | 具体例を挙げてもらえませんか。
       \________________

398牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:44 ID:mvDMRy2v
[3/18]
   (具体的にはこうなります)
━O━━━━━━━━━━━━━━━━━━━━━━━━
  o    例: 1.2345*10^-3
  。      符号 正, 仮数 1.2345, 指数 -3
  ,__ 注  浮動小数点の場合, 精度は仮数部の桁数で,
  iii■∧  / 表現可能な範囲は指数部の桁数で決まります。
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 1.2345E-3という表記で見たことあります。
    \____               ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄
           | Excelで言うところの指数表示か。
          \_______________

399牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:45 ID:mvDMRy2v
[4/18]
━━━━━━━━━━━━━━━━━━━━━━━━━━
  数学上は整数でも, 浮動小数点として扱うことができます。
  表示が整数だから内部でも整数扱いとは限りません。
  また, 整数を指数表示することもできます。
  表示と実際の内部の取り扱いは別の話です。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 表示が1200でも実は浮動小数点の1.20*10^3だったり
    \__                ∧
       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        | 整数の1200が1.20E03と表示されてたりするわけだ。
       \______________________

400牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:46 ID:mvDMRy2v
[5/18]
   (整数の説明もしておきましょう)
━O━━━━━━━━━━━━━━━━━━━
  o    整数
  。     符号はある場合もない場合もある。
  ,__   桁数に応じた表現範囲を持つ。
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 3桁の整数なら-999〜999が表現範囲と。
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄
           | 符号がなければ0〜999だけどね。
          \_______________

401牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:47 ID:mvDMRy2v
[6/18]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 整数と浮動小数点の違いのまとめ
   整数
   ・ 加減算, 乗算で誤差が生じない
      どのコンピュータでも同じ結果が得られる。
   ・ 絶対値が極端に大きな数や小さな数は扱えない
      表現範囲を越えるような極端に大きな整数は扱えない。
      また, 小数を扱うことはできない。
   ・ 大きな数字を扱う場合, その桁数だけメモリが必要となり効率が悪い
      100桁の整数を保持するなら100桁分のメモリが必要。
   ・ 大きな数字を扱う場合, その桁数だけ計算を行うので計算時間がかかる
      100桁の数字なら100桁分の計算が常に必要となる。
   浮動小数点
   ・ 加減算, 乗算でも誤差を生じる
      ハードウェアの設計によっては結果が相互に異なる可能性もある。
   ・ 絶対値が極端に大きな数も小さな数も扱える
      100桁の整数を表現する場合でも指数部が99, つまり2桁まで表せれば十分。
      また, 小数を扱うこともできる。
   ・ 大きな数字でもメモリをあまり消費することなく数値を保持できる
      指数部を2桁確保しておけば100桁の整数まで表せる。
   ・ 大きな数字でも仮数部の桁数に応じた計算時間しかかからない
      必要な精度に応じた仮数部を確保しておけば
      精度に応じた計算時間しかかからない。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━━━━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
     | まとめってもう終わりですか?
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
           | (…それはそれでありがたいけど…)
          \________________

402牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:47 ID:mvDMRy2v
[7/18]
   (ご期待に添えず残念ですが)
━O━━━━━━━━━━━━━━━━━━━━━━━━━━━
  o  ここからが本題―浮動小数点演算の精度, 誤差について―
  。   ・ 丸め誤差, 桁落ち誤差
  ,__ ・ 浮動小数点演算の歴史的な話
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━━━
   |  つ ∇       (゚Д゚,,)      (,,゚Д゚)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
     | (…前置きにしては長い話だ…)
    \____               ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄
           | (…さすがに甘い考えだったか…)
          \_______________

403牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:48 ID:mvDMRy2v
[8/18]
   (早速本題です)
━O━━━━━━━━━━━━━━━━━━━━━━━
 o  丸め誤差
  o   数値の丸めによって生じる誤差で,
 。    最下位の位が影響を受ける。
  。     例: 2/3=6.6666667E-1
 。  桁落ち誤差
  .    加減算で絶対値の差が大きいときに
 .    小さいほうの数値が演算結果に反映されないこと
  .     例: 1.234E5(123450)+6.789E0(6.789)=1.234E5
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄
     | まあ、これはしょうがないな。
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄
           | 問題なら仮数の桁を増やすしかないね。
          \_________________

404牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:49 ID:mvDMRy2v
[9/18]
━━━━━━━━━━━━━━━━━━━━━━━━━
 浮動小数点計算の桁落ち誤差実例
   ∞
   Σ1/n
   n=1
 本来なら∞になるはずだが実際には桁落ち誤差により
 ある程度の値で収束してしまう。
 また, 加算順序を変えると結果が変わる。
   1/1→1/2147483646の加算結果
    単精度(32bit)浮動小数点変数 15.40368
    倍精度(64bit)浮動小数点変数 22.0647782615552
   1/2147483646→1/1の加算結果
    単精度(32bit)浮動小数点変数 18.80792
    倍精度(64bit)浮動小数点変数 22.0647782618524

 なお特殊な数学ソフトを使うと
 収束しないので計算できないと答えてくれます。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 倍精度で精度が目に見えてに向上してる。
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
           | 数学ソフトってMathematicaの類か。
          \________________

405牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:49 ID:mvDMRy2v
[10/18]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 歴史的な話―ガード桁―
   例: 1.234E0+5.678E-3 (仮数4桁, 指数1桁)
   指数を大きいほうに揃え計算すると
    1.234E0+0.005E0=1.239E0
   指数を揃える際に2桁増やし, 6桁で計算してから丸めると
    1.23400E0+0.00567E0=1.23967E0=1.240E0
   こちらのほうがより本来の結果に近い。
   このように元の仮数の桁数より大きな桁数で計算を行うと精度が上がる。
   この精度向上のため付加された桁をガード桁と呼ぶ。

   昔はガード桁のないコンピュータもありました。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 精度が上がるのに何故付けなかったんだ?
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
           | 昔だから知らなかったんじゃないの?
          \________________

406牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:50 ID:mvDMRy2v
[11/18]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 何故ガード桁のないコンピュータが存在したか?
   計算時間は仮数部の桁数に応じて長くなります。
   ガード桁がなければその分速く計算ができました。←重要
   ただし, 結果は当然精度の低いものでした。

   また, 乗算を行う場合,
   仮数の下位の桁の数字の影響は小さいということで
   元の仮数より小さな桁数で計算を行うものすらありました。
   この場合, 1を掛けただけで仮数の下位の数字が落とされ
   元の数字と違うものになります。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━━━
   |  つ ∇       (゚Д゚;)      (゚Д゚;)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 1掛けただけで元の数字と変わる……。
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄
           | それはいくらなんでも問題だよな。
          \_______________

407牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:50 ID:mvDMRy2v
[12/18]
   (また, こんな例も)
━O━━━━━━━━━━━━━━━━━━━━━━━━━
  o  あるコンピュータでは割り算を次のように行っていました。
  。  理由は速度向上のためです。
  ,__ x/y → x*(1/y)
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
     | 一見何の問題もないですね。
    \______           ∧
             / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄
              | でも問題が発生したと……。
             \_____________

408牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:51 ID:mvDMRy2v
[13/18]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 単精度浮動小数点変数の表現範囲は次のようになっています。
  0, ±1.401298E-45 〜±3.402823E38
 倍精度では次のようになります。
  0, ±4.94065645841247E-324 〜±1.79769313486232E308
 指数部が負のほうに偏っていることに注意。

 先の計算のxとyが倍精度でx, yがともに
 1.00000000000000E-320の場合, x/yとして計算すると1になります。
 しかし, x*(1/y)として計算すると次のように
 計算途中で倍精度の上限を越えてしまい計算できません。
  1/y=1.00000000000000E320>1.79769313486232E308

 かつてはこのように計算速度のために計算結果が犠牲にされていました。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
       / ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
        | 幸いにして今は昔の話か。
       \_______      ∧
                  / ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄
                   | と, なると現在は?
                  \_________

409牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:51 ID:mvDMRy2v
[14/18]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 現在ではIEEEが浮動小数点演算を規格化(IEEE754)しています。
 これに沿ったコンピュータならまともな結果が得られます。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━━━━ ∧∧━━━━━━━━━
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄
     | めでたし, めでたしですね。
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄
           | IEEEって1394だけじゃないんだ……。
          \________________

410牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:52 ID:mvDMRy2v
15/18]
━━━━━━━━━━━━━━

   今日の講義はここまで
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━     ∧∧
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ     /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ===============

[16/18]
   (……)
━O━━━━━━━━━━━━
  o
  。
  ,__
  iii■∧  /
━ < ゚ _・゚>/━━━━━━∧∧━     ∧∧
   |  つ ∇       (゚Д゚,,)      (゚Д゚,,)
 ノ).|  |┌─┐    /⊂  ヽ    /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
          / ̄ ̄ ̄   ̄ ̄ ̄ ̄
           |  ……。
          \_____      ∧
                  / ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄
                   |  ……?
                  \_________

411牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:52 ID:mvDMRy2v
[17/18]
   (……)
━O━━━━━━━━━━━━
  o
  。
  ,__
  iii■∧  /
━ <;゚ _・゚>/━━━━━━∧∧━     ∧∧
   |  つ ∇       (゚Д゚;)     (゚Д゚;)
 ノ).|  |┌─┐    /⊂  ヽ    /⊂  ヽ
 \|  ||□|   √ ̄(___ノ〜 √ ̄(___ノ〜
   ∪∪ |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 無理に揚げ物で講義締めなくていいですよ。
    \____              ∧
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           | ここの教官達に合わせることないですから。
          \__________________

412牛の骨 ◆Y.sCOWwwCM sage :03/04/09 23:53 ID:mvDMRy2v
[18/18]
━━━━━━━━━━━━━━

      そうします。


━━━━━━━━━━━∧∧━     ∧∧
                (,,゚Д゚)      (゚Д゚,,)
       ┌─┐       ⊂  ヽ     ⊂  ヽ
       |□|   √ ̄(___ノ〜 √ ̄(___ノ〜
      |   |   ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄. |   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | 揚げ物教官達との付き合いに苦労してそうだね。
    \________          ∧
                / ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 | ……苦労は俺達もだけどな。
                \_____________

 
     
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送