Nanashi-softプログラマ専用Unityでゲーム開発


◇Unityでゲーム開発 -C#で数値変数と有効範囲-

●変数の宣言

型 変数名 = 初期化内容;

例)変数を整数型で宣言して,0で初期化する
int a = 0;

例)変数を不動小数点型で宣言して,0.0で初期化する
float a = 0.0f;

例)変数を文字列で宣言して,「test」で初期化する
string a = "test";
※JavaScriptは先頭のSが大文字です

●変数の型と有効範囲

○整数型
sbyte型 : 符号付8bit整数(-128~127)
byte型 : 符号なし8bit整数(0~255)
short型 : 符号付16bit整数(-32768~32767)
ushort型 : 符号なし16bit整数(0~65535)
int型 : 符号付32bit整数(-2147483648~2147483647)
uint型 : 符号なし32bit整数(0~4294967295)
long型 : 符号付64bit整数(-9223372036854775808~9223372036854775807)
ulong型 : 符号なし64bit整数(0~18446744073709551615)

○浮動小数点型
float : 符号付32bit浮動小数点数(数値の後ろにfを付けて表す)
double : 符号付64bit浮動小数点数(数値の後ろにdを付けて表す)
decimal : 符号付128bit浮動小数点数(数値の後ろにmを付けて表す)

浮動小数点型には演算誤差が出る場合があるので注意
decimalは構造体で処理されており,誤差の発生は最小限に抑えられます

・float型で誤差が出る例
float a=0.0f;
for(int i=0; i < 10; i++){
	a = a + 0.1f;
	Debug.Log(""+a);
}
↓結果
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8000001 ←誤差
0.9000001 ←誤差
1

・double型でも演算途中にfloat型を混ぜると誤差が出る例
double a=0.0d;
for(int i=0; i < 10; i++){
	a = a + (double)0.1f;	//float型数値を加算する
	Debug.Log(""+a);
}
↓結果
0.100000001490116 ←誤差
0.200000002980232 ←誤差
0.300000004470348 ←誤差
0.400000005960464 ←誤差
0.500000007450581 ←誤差
0.600000008940697 ←誤差
0.700000010430813 ←誤差
0.800000011920929 ←誤差
0.900000013411045 ←誤差
1.00000001490116 ←誤差

どちらも decimal型を使えば正常な値を取得できます
decimal a=0.0m;
for(int i=0; i < 10; i++){
	a = a + 0.1m;
	Debug.Log(""+a);
}

decimal a=0.0m;
for(int i=0; i < 10; i++){
	a = a + (decimal)0.1f;	//float型数値を加算する
	Debug.Log(""+a);
}


TOPプログラマ専用Unityでゲーム開発