bma*_*cho 3 c++ python precision
当我必须用有理数(分子和分母整数)做一些算术时,我正在做 leetcode。
我需要在列表中计算坡度。在Python中
collections.Counter( [ x/y if y != 0 else "inf" for (x,y) in points ] )
Run Code Online (Sandbox Code Playgroud)
完成了这项工作,我通过了所有测试。((编辑:他们在评论中指出,练习中的数字要小得多,而不是一般的 32 位整数))
我想知道这是否正确,也就是说,对于 a,b,c,d 32 位整数,python 是否正确识别 a/b == c/d 作为有理数。我也对 C++ 的案例感兴趣,以及任何可能有用的其他事实(枪炮、最佳实践、背后的理论(如果不是太长的话)等)。
另外,这个问题似乎很常见且有用,但我并没有真正找到任何相关信息(给我重复项!),也许我遗漏了一些重要的关键字?
假设您不想考虑整数除法的影响,请检查等效项ad == bc。
这在数值上更加稳定。在 C++ 中你可以写
1LL * a * d == 1LL * b * c
Run Code Online (Sandbox Code Playgroud)
以防止溢出。
这并不安全,而且我至少见过一个 LeetCode 问题,你会失败(也许是Max Points on a Line)。例子:
\na = 94911150\nb = 94911151\nc = 94911151\nd = 94911152\nprint(a/b == c/d)\nprint(a/b)\nprint(c/d)\nRun Code Online (Sandbox Code Playgroud)\n尽管斜率实际上不同,但和a/b都是c/d相同的值(在线尝试!):float
True\n0.9999999894638303\n0.9999999894638303\nRun Code Online (Sandbox Code Playgroud)\n您可以使用或之后的fractions.Fraction(x, y)元组(如果我没记错的话,这比类更轻量/高效)。(x//g, y//g)g = math.gcd(d, y)Fraction
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |