「.NETのfloat.Epsilon定数は計算機イプシロンではない」の版間の差分
imported>Administrator 編集の要約なし |
imported>Administrator 編集の要約なし |
||
| 16行目: | 16行目: | ||
https://oku.edu.mie-u.ac.jp/~okumura/algo/ | https://oku.edu.mie-u.ac.jp/~okumura/algo/ | ||
速攻で[[C言語]]からC#に[[移植]]した(ほぼ[[コピペ]]しただけ)。< | 速攻で[[C言語]]からC#に[[移植]]した(ほぼ[[コピペ]]しただけ)。 | ||
<syntaxhighlight lang="csharp"> | |||
using System; | using System; | ||
| 46行目: | 48行目: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
計算機イプシロンの定番の[[アルゴリズム]]といえば、変数をひたすら2で割り続け、ゼロになった瞬間のひとつ前を捉えるというもの。「1以上」という条件はコンピューターの指数と仮数の組み合わせで表現される浮動小数点数では、1未満だと指数部だけを使ってどこまでも小さくなってしまうためであり、なんとしても仮数部を使おうということらしい。< | 計算機イプシロンの定番の[[アルゴリズム]]といえば、変数をひたすら2で割り続け、ゼロになった瞬間のひとつ前を捉えるというもの。「1以上」という条件はコンピューターの指数と仮数の組み合わせで表現される浮動小数点数では、1未満だと指数部だけを使ってどこまでも小さくなってしまうためであり、なんとしても仮数部を使おうということらしい。 | ||
<syntaxhighlight lang="csharp"> | |||
static double MachineEpsilon() | static double MachineEpsilon() | ||
{ | { | ||
| 61行目: | 64行目: | ||
return eps; | return eps; | ||
} | } | ||
</ | </syntaxhighlight> | ||
== 備考 == | == 備考 == | ||
実行環境(主に[[CPU]]の違い)により計算結果が変化する点に注意すること。 | 実行環境(主に[[CPU]]の違い)により計算結果が変化する点に注意すること。 | ||
[[アーキテクチャ]] | [[アーキテクチャ]]がいっぱいある[[Xamarin]]系は要注意。 | ||
[[category: .NET]] | [[category: .NET]] | ||
[[category: Mono]] | [[category: Mono]] | ||
[[category: Xamarin]] | [[category: Xamarin]] | ||