提供:Japanese Scratch-Wiki
() / () | |
() / ()
| |
カテゴリ | 演算 |
タイプ | 値 |
() / () ブロック (演算ブロック/値ブロック) は、1つめの数を2つめの数で割って、その結果を返す。
結果が割り切れないときは、このブロックの返す値は小数になる。 割り算の 剰余(余り)がほしいときは、 () を () で割った余りブロックを使用すればよい。
さらに、このブロック自身やその他の計算(足し算、引き算、かけ算など)ブロックを指定して、入れ子状にすることもできる。 これによって、より多くの数を使った計算を表現できる。
ゼロ除算
割る数を±0に指定したときは、Scratch 2.0以降では、以下の値が返される:
- 両方の引数の符号が一致するとき(例: 1/0, -1/-0) Infinity(正の無限大)
- 両方の引数の符号が一致しないとき(例: -1/0, 1/-0) -Infinity(負の無限大)
- 一つ目の引数が±0であるとき (例: 0/0, -0/0) NaN(非数)
Scratch 1.4以下では、スクリプトエラーが発生し、スクリプトの実行が止まった。
よくある使用例
プロジェクトでわり算が必要になったとき使用する。 よくある使用例は次のとおり:
- 計算機シミュレーターを作る
もし <(計算の種類) = [わり算]> なら [答え v] を ((入力1) / (入力2)) にする end
- リスト内の項目すべての値を半分にする
[変数 v] を (1) にする ([数リスト v] の長さ::list) 回繰り返す [数リスト v] の (変数) 番目を((([数リスト v] の (変数) 番目) / (2))を四捨五入) で置き換える
- 数学の公式を使って計算する (三角形の面積を求める)
[面積 v] を (((底辺) * (高さ)) / (2)) にする
別のブロックによる表現
- 詳細は「代用ブロック一覧」を参照
このブロックの動作は、次のコードで再現できる:
もし <(b) < [0]> なら [結果 v] を ((-1) * ((a) * (((-1) * (((-1) * (b)) の [ln v]::operators)) の [e^ v]::operators))) にする でなければ [結果 v] を ((a) * (((-1) * ((b) の [ln v]::operators)) の [e^ v]::operators)) にする end
ゼロ除算の扱いは上に書かれた通り。
このコードのしくみ
このコードのしくみを確認しておこう。 「でなければ」以降を数式で書くと次のとおり(1):
a * e ^ (-1 * ln b) ……(1)
これがa / bと同じになること(2)を証明すれば良い
a * e ^ (-1 * ln b) = a / b ……(2)
(2)式の両辺を「a」でわる
e ^ (-1 * ln b)= 1 / b ……(3)
さらに両辺の自然対数をとる(4)
ln e ^ (-1 * ln b) = ln (1 / b) ……(4)
lnは自然対数なので底がeであり、log a a b = bより、(4)式の左辺は次のように変形できる。
左辺 = ln e ^ (-1 * ln b) = -1 * ln b ……(5)
a * log b はlog (ba) であるため、(5)式はさらに次のように変形できる:
左辺 = -1 * ln b = ln (b-1) ……(6)
一方、(4)式の右辺は次のように変更できる
右辺 = ln (1 / b) = ln b -1 ……(7)
よって左辺=右辺が成立し、(2)の等式が正しいことを証明できる。
負の数の対数は存在しないため、コードの前半(「もし」〜部分)では、bを正の数として扱い、最後に符号を反転している。
関連項目
() + () • () - () • () * () • () / () • () から () までの乱数 • () < () • () > () • () = () • () かつ () • () または () • () ではない • () と () • () の () 番目の文字 • () の長さ • () に () が含まれる • () を () で割った余り • () を四捨五入 • () の ()その他のブロック
|