C# 科学计算 - 具有许多小数的大数

C# Scientific calculation - big number with many decimals

提问人:Nick 提问时间:3/14/2021 最后编辑:Nick 更新时间:3/14/2021 访问量:325

问:

我有一个问题,我需要建议:我必须用大数字进行计算,范围为(正/减,有符号);整数部分:和精度,小数部分:。大多数时候,我只进行简单的简单操作(add/subtr/mult/div),其中我可以忽略小数部分的大多数数字(仅使用 8 位小数) - 但是,在许多情况下,我必须采用“整体”小数并以该精度进行计算(并存储用于后续计算的结果)。 数字示例:70*(10^27)9*(10^-31)

66898832014839425790021345548 . 8499970865478385639546957014538

我看到了关于十进制与长整型等的文章。 我应该使用十进制还是应该创建自定义类型?如果后者是,我该如何进行简单的算术运算?(仅接受最后一位小数的四舍五入) 我的项目都是 C# 和 SQL Server;提前非常感谢你。

C# 数学 十进制

评论

0赞 JHBonarius 3/14/2021
Afaik:没有支持精度小数点后 60 位的标准类型。
1赞 Franz Gleichmann 3/14/2021
出于好奇 - 我能问什么样的计算需要这种精度等级吗(我的意思是 - 这是将整个已知宇宙映射到普朗克长度的数量级)?此外,您可能希望使用类似 BigDecimal 的东西
0赞 Nick 3/14/2021
@FranzGleichmann:谢谢你的建议,我对BigDecimal并不陌生,会查一下。这些数据来自外部来源,其中一些来自MATLAB(我只是猜测),并且是区块链模拟算法的一部分。它不是采矿之类的,它们将用于数字签名(另一个项目,不是我的)。不幸的是,我不是专家,我已经有一些代码用于某些操作,但不是用于此类数据(这么多数字......整数和小数部分)
0赞 jdweng 3/14/2021
看起来 Matlab 有一个库(参见 blogs.mathworks.com/cleve/2017/05/22/...)。因此,我会在 Matlab 中完成所有数学运算,并在 c# 中返回一个字符串来显示结果。

答:

4赞 Boris Sokolov 3/14/2021 #1

C# 中没有标准的实现,但您可以基于 BigInteger 创建自己的库,例如

public BigDecimal(BigInteger integer, BigInteger scale)

您还可以引用一些第三方库,例如 GMP 及其 .Net 分支/端口,如 Math.Gmp.Native.NETlibgmp 等。

有一些自定义库,正如 Franz Gleichmann 在他的评论中已经提到的那样:BigDecimalAngouriMath

对于 SQL Server,大多数库都使用字符串来存储此类数据。例如,在 Java 中有 BigDecimal,它通过 JDBC 映射到字符串。

评论

1赞 Nick 3/14/2021
那绝对很棒,非常感谢,我会立即尝试!