【发布时间】:2016-02-14 04:49:20
【问题描述】:
我有以下声明。
d = (pow(a,2*l+1)+1)/(val+1);
这里,
-
val、a和l是与问题无关的变量。 - 分子可以超出 long long int 范围。
- 分母是分子的除数。
但最终的答案 d 肯定会在long long int 范围内。如何在不损失准确性的情况下计算d?我更喜欢一个答案,而不是将它们转换为数组并使用小学乘法和除法。
【问题讨论】:
-
您应该说出您的目标语言。我猜是 c 或 c++。
-
我不能不准确。我的代码对分子可以达到 10^21 的大数的计算给出了错误的答案。有没有不丢失任何准确性的方法?已知分母将始终将分子除以没有余数
-
[...]My code gives wrong answer for calculation on large numbers[...]你需要解释为什么会得到或者你认为你会得到错误的结果(例如,用浮点数进行==测试永远不会像预期的那样工作)。否则,唯一的答案是没有办法绕过大数字库。 -
你怎么知道你的计算器没有错?当你说你的评委时,这是否意味着你提交这个是为了某种编程竞赛?
标签: c++ math integer-overflow arithmetic-expressions integer-arithmetic