避免不必要的溢出

时间:2014-09-05 21:46:06

标签: math int overflow fractions

我遇到了问题。我正在编写分数计算器(用于分配)。到目前为止它工作得很好,问题是我必须处理算术溢出。我做了一些研究,现在理解溢出。但是,我不知道如何处理它。溢出是由提名者和分母之间的简单操作引起的。

我们给出的例子是分数操作:999999/1000000 * 500000/999999应给出答案1/2。当我的程序乘以999999 * 500000时会出现溢出,最终结果不准确(我得到-2 10204169/22761874)。

主要目标是每当减少的数字可以正确表示而没有溢出时产生正确的结果。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为你应该 - 至少 - 告诉我们你正在使用哪种语言。每种语言都有其技巧来避免这些陷阱。 Python有一个更好的技巧:

>>> from fractions import Fraction as Fraction
>>> Fraction(999999 * 500000, 1000000 * 999999)
Fraction(1, 2)

答案 1 :(得分:0)

感谢大家的帮助。我终于弄明白了。我通过将分子除以分母然后使用floor()将其向下舍入,将分数转换为小数;一旦它向下舍入,我把它转回一小部分。似乎工作正常。

这是逻辑:

operation: 999999/1000000 * 500000/999999

Fraction was 999999/1000000
toDecimal = .999999
floor ()= 1
fraction = 1/1

Fraction was 500000/999999
toDecimal = .5000005
floor ()= .50
fraction = 1/2

operation is now 1/1 * 1/2 = 1/2 (Woohoo!)

希望这可以帮助那些有这个问题的人。