p.37 整数と実数
・コンピュータ内では整数と実数は別扱いになっている
・小数点がない数字列(先頭のみ「-」可能)は整数とみなされる
・小数点が1つだけある数字列(先頭のみ「-」可能)は実数とみなされる
・加減乗算では、左右どちらかまたは両方が実数だと結果は実数になる(計算手順は同じ)
・除算では、左右どちらかまたは両方が実数だと実数計算に、でなければ整数計算になり小数点以下切り捨ての整数になる
・剰余算における実数の扱いは言語や処理系で異なるが、C#では実数を含むことが可能
※誤差が出ることが多いので扱いは注意(誤差を避けるには整数化して行うと良い)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chap1_6_3 : MonoBehaviour {
void Start() {
Debug.Log( 2 + 0.5 ); //式2+0.5の評価(実数加算結果)を出力
}
void Update() {
}
}
アレンジ演習:Chap1_6_3
・実数と実数の加算で小数点以下がゼロの場合の結果を確認しよう
・整数と実数の剰余算の結果を確認しよう
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chap1_6_3 : MonoBehaviour {
void Start() {
Debug.Log( 2 + 0.5 ); //整数と実数の加算結果を出力→2.5
Debug.Log( 2.5 + 0.5 ); //実数と実数の加算結果を出力→3(表示で整数化)
Debug.Log( 10 % 0.3 ); //整数と実数の剰余算結果を出力→0.1
Debug.Log( 10.3 % 2 ); //実数と整数の剰余算結果を出力→0.3000…01
Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
}
void Update() {
}
}
p.37 補足:ゼロ除算
・0で割った場合の結果は言語や処理系に依存する ・C#の場合、整数を明示的に0で割るとコンパイルエラーとなり実行できない ・なお、右辺が式であっても評価結果が明示的に0になる場合も同様 ・実数を0で割ったり、実数の0.0で割ることは可能だが… ・また、負の実数を0で割ると… ・ちなみに、後述する変数の利用時には結果が異なる
アレンジ演習:Chap1_6_3
・実数を0で割ったり、実数の0.0で割った場合の結果を確認しよう
・負の実数を0で割った場合の結果を確認しよう
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chap1_6_3 : MonoBehaviour {
void Start() {
Debug.Log( 2 + 0.5 ); //整数と実数の加算結果を出力→2.5
Debug.Log( 2.5 + 0.5 ); //実数と実数の加算結果を出力→3(表示で整数化)
Debug.Log( 10 % 0.3 ); //整数と実数の剰余算結果を出力→0.1
Debug.Log( 10.3 % 2 ); //実数と整数の剰余算結果を出力→0.3000…01
Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
Debug.Log( 10.0 / 0 ); //実数をゼロで割った結果を出力→ Infinity
Debug.Log( 10 / 0.0 ); //ゼロを実数で割った結果を出力→ Infinity
Debug.Log( -1 / 0.0 ); //負の実数をゼロで割った結果を出力→ -Infinity
}
void Update() {
}
}
p.38 長い数式を入力する
・演算子には優先順位があるが、これを暗記するのではなく、左から右への順にならない場合はカッコで示すことが 推奨されている ・例:加減算より乗除算が優先なので 1 + 2 * 3 → 7 だが 1 + (2 * 3) とするのが望ましい ・剰余残は除算と同じ優先度だが間違いやすいので注意
p.39 演算子の優先順位一覧
・f(x):メソッドの呼び出しのことで、例えば Debug.Log(1) が該当し、優先順位1位だが、カッコ内に式がある 場合は、その式の方が優先 ・x++:p.105参照。インクリメントと呼び「1加算した結果にする」 ・x--:p.108参照。デクリメントと呼び「1減算した結果にする」 ・-x:値を負の数にする。実は「-5」は整数5の前に単項-演算子をつけて負の数にしたもの ・++x:前置増分演算子といい、インクリメントの一種で「まず1加算してから」 ・--x:前置減分演算子といい、デクリメントの一種で「まず1減算してから」 ・(T)x:p.57参照。キャスト演算子といい、例えば整数を実数に変換する場合などに用いる ・x << y:左シフト演算子といい。xを2進数にしてy桁分だけ左にずらし、空きを0で埋めた結果を返す。 1左シフトすると2倍になるので2のべき乗倍の高速化に用いる。 ・x >> y:右シフト演算子といい。xを2進数にしてy桁分だけ右にずらし、空きを0で埋めた結果を返す。 1右シフトすると半分になるので2のべき乗分の1の高速化に用いる。 ・論理AND/OR/XOR:p.56で説明するbool型に用いる論理演算子。 ※ C言語では0/非0で論理演算を代替できるが、C#では禁止になっている
アレンジ演習:Chap1_6_3
・上辺が10、下辺が21、高さが3の台形の面積を実数で出力しよう
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chap1_6_3 : MonoBehaviour {
void Start() {
Debug.Log( 2 + 0.5 ); //整数と実数の加算結果を出力→2.5
Debug.Log( 2.5 + 0.5 ); //実数と実数の加算結果を出力→3(表示で整数化)
Debug.Log( 10 % 0.3 ); //整数と実数の剰余算結果を出力→0.1
Debug.Log( 10.3 % 2 ); //実数と整数の剰余算結果を出力→0.3000…01
Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
Debug.Log( 10.0 / 0 ); //実数をゼロで割った結果を出力→ Infinity
Debug.Log( 10 / 0.0 ); //ゼロを実数で割った結果を出力→ Infinity
Debug.Log( -1 / 0.0 ); //負の実数をゼロで割った結果を出力→ -Infinity
Debug.Log( (10 + 21) * 3 / 2.0 ); //上辺10下辺21高さ3の台形の面積を実数で
}
void Update() {
}
}
p.40 同じ優先順位の演算子を組み合わせた式
・複数の演算子を含む式は、演算子が(基本的に左から)1つずつ評価され、途中経過の値がその型に応じた形で 保持される ・この時の型を意識して式を書く必要がある ・例「2 + 10.5 + 5.5」は整数+実数で実数の12.5が途中経過になる ・例「2.5 + 10.5 + 5.5」は実数+実数で実数の13.0が途中経過になる(整数になるわけではない)
p.41 優先順位が異なる演算子を組み合わせた式
・優先順位に応じた順序で演算子が1つずつ評価され、途中経過の値がその型に応じた形で保持される
p.42 カッコの中にカッコが入れ子になった式
・優先順位を示すカッコはいくつでも何重にでも指定可能 ・見づらくなる場合は、式を分割するなどの工夫が望ましい(変数を用いるので後述)
p.43 負の数を表す「-」
・演算子は対象の数により単項演算子、2項演算子、3項演算子があり、同じ記号で意味が異なるものや、 対象の型により動作が異なるものがある ・2項-演算子は「左辺から右辺を引いた結果を返す」例:3-4 ⇒ -1を返す ・単項-演算子は「符号を反転した結果を返す」例:-(-4) ⇒ 4を返す ・なお、単項+演算子は実質的に何もしない
提出:アレンジ演習:Chap1_6_3