2020年10月10日
川俣晶の縁側ソフトウェアC# コーディング How To total 1365 count

【入門級】円周率が欲しい

Written By: 川俣 晶連絡先

円周率が欲しい §

 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

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?