提供: Japanese Scratch-Wiki

このきじは ひらがなのページがありません。ごめんなさい。編集者向け:作成する
() / ()
() / ()
カテゴリ 演算
タイプ

() / () ブロック (演算ブロック値ブロック) は、1つめの数を2つめの数でわって、その結果を返す。

結果がわり切れないときは、このブロックの返す値は小数になる。 わり算の 剰余(余り)がほしいときは、 () を () で割った余りブロックを使用すればよい。

使用する2つの数は、ブロック内に直接入力するか、または、値ブロックで指定する。

さらに、このブロック自身やその他の計算(足し算引き算かけ算など)ブロックを指定して、入れ子状にすることもできる。 これによって、より多くの数を使った計算を表現できる。

0によるわり算

2つめの数(わる数)が0の場合、Scratch 2.0は次の値を返す。

・1つめの数が正の数のとき → inifinity (無限大)

・1つめの数が負の数のとき → -inifinity (負の無限大)

・1つめの数が0のとき → NaN (別の数式の中で評価するときは0になる)

一方、Scratch 1.4では、スクリプトエラーが発生し、スクリプトの実行が止まる。

よくある使用例

プロジェクトでわり算が必要になったとき使用する。 よくある使用例は次のとおり:

  • 計算機シミュレーターを作る
もし <(計算の種類) = [わり算]> なら
[答え v] を ((入力1) / (入力2)) にする
end
  • リスト内の項目すべての値を半分にする
[変数 v] を (1) にする
([数リスト v] の長さ::list) 回繰り返す
(変数) 番目([数リスト v])を((((変数) 番目([数リスト v])) / (2))を四捨五入) で置き換える


  • 数学の公式を使って計算する (三角形の面積を求める)
[面積 v] を (((底辺) * (高さ)) / (2)) にする

別のブロックによる表現

詳細は「代用ブロック一覧」を参照

このブロックの動作は、次のコードで再現できる:


もし <(b) < (0)> なら
[結果 v] を (((a) * ([e^ v]\(((-1) * ([ln v]\(((-1) * (b))\)))::operators)) * (-1)) にする
でなければ
[結果 v] を ((a) * ([e^ v]\(((-1) * ([ln v]\((b)\)))::operators)) にする
end

このスクリプトは、0で割ろうとしたときに次の値を返す。

・1/0 が「Infinity」を返す (元のブロックは、オフラインエディターではエラーになりスクリプトが停止する)

・-1/0 が「-Infinity」を返す(同上)

・0/0 が 「Error!」を返す。(元のブロックは、オフラインエディターではスクリプトが停止する)

このコードのしくみ

このコードのしくみを確認しておこう。 「でなければ」以降を数式で書くと次のとおり(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を正の数として扱い、最後に符号を反転している。

Scratchではln 0が「-infinity」 (負の無限大) を返すため、このコードを使えば0による除算を行ってもエラーが発生しない。

値という面で、元のブロックにもっとも近い動作をする代替コードは次のとおりである。このコードは0による除算が発生すると、「Error!」を返す。

(((b) * ([e^ v]\(((-1) * ([ln v]\(([絶対値 v]\((b)\)::operators)\)))\)::operators)) * ((a) * ([e^ v] \(((-1) * ([ln v]\(([絶対値 v]\((a)\)::operators)\)))\)::operators)))

関連項目