コンピュータ数学
数学とコンピュータ数学の比較。
数学 | int, decimal | double, float |
---|---|---|
任意の数字が対象 | 有限桁数が対象 | 有限有効桁数、有限指数が対象 |
数字以外は計算の対象外 | 最大値、最小値を表せ、計算対象となる | 最大値、最小値、イプシロン、非数値、+無限大、-無限大を表せ、計算対象となる |
数学のルールは成り立つ | 有効桁数内での数学のルールは成り立つ | 数学のルールで規定されない演算もでき、桁落ちなどにより、数学のルールが成り立たないこともある |
0割は許されない | 0割は例外 | 0割は矛盾しない計算 |
無限大は数字ではない | 無限大は表現できない | 無限大も計算対象なので、数字と同様に扱える |
非数値は数字ではない | 非数値は表現できない | 非数値も計算対象なので、数字と同様に扱える |
doubleの演算
- double.NaN != double.NaN
- double.IsNaN(double.NaN)
- double.NegativeInfinity == double.NegativeInfinity
- double.IsNegativeInfinity(double.NegativeInfinity)
- double.IsInfinity(double.NegativeInfinity)
- double.PositiveInfinity == double.PositiveInfinity
- double.IsPositiveInfinity(double.PositiveInfinity)
- double.IsInfinity(double.PositiveInfinity)
- double.IsNaN(double.IsNaN と 任意のdoubleとの演算) // NaNに何をしてもNaN
- double.IsNaN(0.0 / 0)
- 1.0 / 0 == double.PositiveInfinity
- -1.0 / 0 == double.NegativeInfinity
- double.Epsilon + 0 == double.Epsilon
- double.Epsilon * 1 == double.Epsilon
- double.Epsilon + 1e-307 == 1e-307
- double.Epsilon + 1e-308 != 1e-308
- double.Epsilon * double.PositiveInfinity == double.PositiveInfinity
- double.Epsilon * double.NegativeInfinity == double.NegativeInfinity
- double.Epsilon / 0 == double.PositiveInfinity
- double.MaxValue + 1e292 == double.PositiveInfinity
- double.MaxValue + 1e291 != double.PositiveInfinity
- double.MaxValue * (1 + 1e-15) == double.PositiveInfinity
- double.MaxValue * (1 + 1e-16) != double.PositiveInfinity
- double.MaxValue / 0 == double.PositiveInfinity
- double.MinValue - 1e292 == double.NegativeInfinity
- double.MinValue - 1e291 != double.NegativeInfinity
- double.MinValue * (1 + 1e-15) == double.NegativeInfinity
- double.MinValue * (1 + 1e-16) != double.NegativeInfinity
- double.MinValue / 0 == double.NegativeInfinity
- Math.Abs(double.MaxValue * double.Epsilon - 8.8817842e-16) < 1e-24
- double.NegativeInfinity < 0
- double.IsNaN(double.NegativeInfinity * 0)
- double.IsNaN(double.PositiveInfinity * 0)
- double.IsNaN(double.NegativeInfinity + double.PositiveInfinity)
- double.IsNaN(double.NegativeInfinity - double.NegativeInfinity)
- double.IsNaN(double.PositiveInfinity - double.PositiveInfinity)
- -double.NegativeInfinity == double.PositiveInfinity
- double.NegativeInfinity / 0 == double.NegativeInfinity
- double.PositiveInfinity / 0 == double.PositiveInfinity
- -1 / double.Epsilon == double.NegativeInfinity
- 1 / double.Epsilon == double.PositiveInfinity
- Math.Abs(1 / double.MaxValue - 5.562685e-309) < 1e-315
- Math.Abs(1 / double.MinValue + 5.562685e-309) < 1e-315
- 1 / double.NegativeInfinity == 0
- double.MaxValue / double.NegativeInfinity == 0
- double.MinValue / double.NegativeInfinity == 0
- 1 / double.PositiveInfinity == 0
- double.MaxValue / double.PositiveInfinity == 0
- double.MinValue / double.PositiveInfinity == 0
- double.IsNaN(double.NegativeInfinity / double.NegativeInfinity)
- double.IsNaN(double.NegativeInfinity / double.PositiveInfinity)
- double.IsNaN(double.PositiveInfinity / double.PositiveInfinity)
- double.NegativeInfinity の符号を変えない演算は double.NegativeInfinity
- double.NegativeInfinity の符号を変える演算は double.PositiveInfinity
- double.PositiveInfinity の符号を変えない演算は double.PositiveInfinity
- double.PositiveInfinity の符号を変える演算は double.NegativeInfinity
HttpListenerのサンプル。8080ポートを開けていれば、別マシンからもアクセス可能。
public static void HttpListenerSample() { if (!HttpListener.IsSupported) { Console.WriteLine("Not supported"); return; } HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://+:8080/sample/"); try { listener.Start(); while (true) { HttpListenerContext context = listener.GetContext(); using (HttpListenerResponse res = context.Response) using (StreamWriter sw = new StreamWriter(res.OutputStream)) { sw.WriteLine("<html><head><title>{0}</title></head><body>{0}</body></html>", "This is a sample"); } } } catch (Exception e) { Console.WriteLine(e.Message); } finally { listener.Close(); } }