我正在尝试编写一个程序,使我能够以至少 18 位的精度进行以下计算。
retMin = (long)((Math.Abs(ret)+Math.Abs(retMin))*Math.Pow(-1,Math.Abs(i)));
我相信,如果不使用 Math 类来取出 puts double ,这段代码将会工作。
有没有办法在不使用 double 的情况下做到这一点?
最佳答案
大多数数学
函数也采用小数
,其精度为28位。 Math.Pow
不会,但如果 i
是一个整数,那么你应该通过更改 ret
和 retMin
来解决问题转换为十进制
:
// 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/