C# の Infinity, -Infinity, NaN
◆ 計算部分は JavaScript のと一緒
◆ 0 で割ると Infinity
◆ Infinity + -Infinity や 0.0/0.0 は NaN
◆ それぞれ double と float 型に存在する
◆ decimal, int にはないので 1/0 はエラー
◆ 0 で割ると Infinity
◆ Infinity + -Infinity や 0.0/0.0 は NaN
◆ それぞれ double と float 型に存在する
◆ decimal, int にはないので 1/0 はエラー
C# にも Infinity, -Infinity, NaN がありました
JavaScript では
2 の 1024 から Infinity になるところも一緒のようです
C# の場合は 型があるので Infinity, -Infinity, NaN は float (Single)/double (Double) の型の値です
int や decimal にはありません
なので
float や double にキャストされるようにすれば大丈夫です
Infinity は正確な値じゃなく Math.Pow(2, 1024) だったり Math.Pow(2, 1024) + 1 だったりしますが Infinity 同士の比較は true です
NaN は 0/0 や -Infinity + Infinity などで発生します
JavaScript みたいに異なる型でもむりやり計算することはできないのでそれほど見ないです
ただ 一部のプロパティの初期値に例外な値 未設定の値として使われてたりします
NaN 同士の比較は false です
型があること以外 JavaScript と同じと考えて良さそうです
型がある分正確に double.PositiveInfinity と float.PositiveInfinity は一応ちがうものです
> Math.Pow(2, 1023)
8.98846567431158E+307
> Math.Pow(2, 1024)
∞
> -Math.Pow(2, 1024)
-∞
8.98846567431158E+307
> Math.Pow(2, 1024)
∞
> -Math.Pow(2, 1024)
-∞
JavaScript では
> Math.pow(2, 1023)
8.98846567431158e+307
> Math.pow(2, 1024)
Infinity
> -Math.pow(2, 1024)
-Infinity
と 「Infinity」 と表示されますが C# だと ∞ 記号です8.98846567431158e+307
> Math.pow(2, 1024)
Infinity
> -Math.pow(2, 1024)
-Infinity
2 の 1024 から Infinity になるところも一緒のようです
C# の場合は 型があるので Infinity, -Infinity, NaN は float (Single)/double (Double) の型の値です
int や decimal にはありません
なので
> int i = 1;
> i/0
0 で除算しようとしました。
のようにエラーになります> i/0
0 で除算しようとしました。
float や double にキャストされるようにすれば大丈夫です
> i/0.0
∞
∞
Infinity は正確な値じゃなく Math.Pow(2, 1024) だったり Math.Pow(2, 1024) + 1 だったりしますが Infinity 同士の比較は true です
> 1/0.0 == 2/0.0+1
true
> double.PositiveInfinity == float.PositiveInfinity
true
true
> double.PositiveInfinity == float.PositiveInfinity
true
NaN は 0/0 や -Infinity + Infinity などで発生します
JavaScript みたいに異なる型でもむりやり計算することはできないのでそれほど見ないです
ただ 一部のプロパティの初期値に例外な値 未設定の値として使われてたりします
> double.NegativeInfinity + double.PositiveInfinity
NaN
> 0.0 / 0.0
NaN
NaN
> 0.0 / 0.0
NaN
NaN 同士の比較は false です
> double.NaN == double.NaN
false
> float.NaN == float.NaN
false
> float.NaN == double.NaN
false
false
> float.NaN == float.NaN
false
> float.NaN == double.NaN
false
型があること以外 JavaScript と同じと考えて良さそうです
型がある分正確に double.PositiveInfinity と float.PositiveInfinity は一応ちがうものです
> 1f/0 is float
true
> 1f/0 is double
false
> 1.0/0 is float
false
> 1.0/0 is double
true
true
> 1f/0 is double
false
> 1.0/0 is float
false
> 1.0/0 is double
true