円周率が欲しい §
float型、double型、decimal型で表現可能な最大の桁数を持った円周率が欲しいとします。
どう書けば目的を達成できるでしょうか。
float型はMathF.PI、double型はMath.PIでオッケーです。これらはその型で表現可能な最大の桁数で円周率が定義されているので、それを使っておけば安心です。
しかし、decimal型に対応するPIはありません。これは自分で書くしかありません。decimal型は桁数が多いので、自分が必要とする精度を確保できる桁数まででオッケーです。
罠の数々 §
- C#のdouble型などは、内部的には二進数だが、ソース上は十進数で書く、そのため端数が意図通りに処理されないことがある。桁数ぎりぎりまで書く場合は注意しよう。
参考リンク §
Math.PI フィールド
MathF.PI フィールド
float型を扱う数値関数は全てMathFクラスというわけではないので、Mathクラスとの使い分けは注意しよう。上記のリンクから辿って、Mathクラスのあるもの、MathFクラスにあるものを確認しておこう。
リポジトリ §
https://github.com/autumn009/cshowto
PI §
using System;
class Program
{
static void Main()
{
// double型
double paiD = Math.PI;
Console.WriteLine(paiD);
// float型
float paiF = MathF.PI;
Console.WriteLine(paiF);
// double型
decimal paiE = 3.1415926535897932384626433833M; // 参考: 必要な桁数を考えて適切な桁数書こう
Console.WriteLine(paiE);
}
}
実行結果
3.141592653589793
3.1415927
3.1415926535897932384626433833