C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.75941 の関連記事表示

<< 0 >>
■75941  Re[1]: decimal以上の小数部を扱うには?
□投稿者/ 魔界の仮面弁士 -(2015/05/19(Tue) 19:27:15)
    2015/05/19(Tue) 21:18:27 編集(投稿者)

    No75940 (nobb さん) に返信
    >「分数の計算結果を小数点以下31桁目を切り捨て30桁止め」としなければならなくなってしまいました。

    10進数としての最大桁数は、Int64 で約18.9 桁、Decimal で約 28.8 桁ですので、
    標準的な型では厳しいでしょうね。
    かつての .NET 1.1 時代なら、J# の java.math.BigDecimal という逃げ道もありそうですが…。


    実装の手間を無視しても良いのなら、桁数に制限の無い System.Numerics.BigInteger 構造体を使って、
    計算処理は分数処理を実装、小数点表記への演算は「筆算」の要領で実装するとか。

    たとえば
      1/3 = 0.333333…
    の結果の桁数を 10 桁まで保証するために、
    あらかじめ分子を 「10000000000 倍した数」しておいて、整数除算で
      10000000000/3 = 03333333333
    と算出し、この結果を文字列加工して、1/10000000000 になる位置に
    小数点を打ち直せば、"0.3333333333" という結果が得られそうです。


    > BigDecimal以外が多すぎてもったいないと思っています。
    GitHub に、幾つかの実装が上がっていました。
    各ライセンスモデルは未確認な上、試してもいないのですが、一応参考までに。
    https://github.com/VoltDB/voltdb-client-csharp/blob/master/VoltDB.Data.Client/Types/ThirdParty.BigDecimal.cs
    https://github.com/SuprDewd/SharpBag/blob/master/SharpBag/Math/BigDecimal.cs
    https://gist.github.com/nberardi/2667136
    https://github.com/ckknight/ProjectEuler/blob/master/Ckknight.ProjectEuler/BigDecimal.cs
記事No.75940 のレス /過去ログ128より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -