c# - 使用精度为 18 点的指数和绝对值 C#

标签 c# double long-integer

我正在尝试编写一个程序,使我能够以至少 18 位的精度进行以下计算。

retMin = (long)((Math.Abs(ret)+Math.Abs(retMin))*Math.Pow(-1,Math.Abs(i)));

我相信,如果不使用 Math 类来取出 puts double ,这段代码将会工作。

有没有办法在不使用 double 的情况下做到这一点?

最佳答案

大多数数学函数也采用小数,其精度为28位。 Math.Pow 不会,但如果 i 是一个整数,那么你应该通过更改 retretMin 来解决问题转换为十进制:

// assumptions
decimal retMin = ...
decimal ret = ...
int i = ...

retMin = ((Math.Abs(ret)+Math.Abs(retMin))*(decimal)Math.Pow(-1,Math.Abs(i)));

或者按照@Dmitry的建议更改最后一个组件以避免强制转换(以及可能的精度损失):

retMin = (Math.Abs(ret)+Math.Abs(retMin))* (i % 2 == 0 ? 1 : -1);

关于c# - 使用精度为 18 点的指数和绝对值 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721664/

相关文章:

c# - 系统参数超出范围异常 : startIndex cannot be larger than length of string

java - Java 中使用 double 保持精度

java - 对于 JAMA 或其他库,将 List<List<Double>> 转换为 double[][]

json - 数据类型 long - high 和 low 是什么意思?

c - 如何将 unsigned long long 类型的刻度转换为可读时间格式?

java - 如何在 Java 中使用具有长值的 printf() 方法?

c# - 如何使用 XML 序列化没有无参数构造函数的密封类?

c# - CaSTLe Log4Net 设施不记录

c - 缩短 double 值 x 数字

C# Emgu.Cv wrapper : Retrieved (byte) pixel-values of Mat do not match Image<Gray, byte> 字节值,裁剪 ROI 时