为什么当x = 1000000000000000000和y = 12时x // y和int(x / y)返回不同的结果?

时间:2019-06-29 10:10:19

标签: python python-3.x syntax

编辑:当使用x = 1000000000000000000和y = 12进行检查时,x // y和int(x / y)返回不同的结果。

print(1000000000000000000//12, int(1000000000000000000/12))
>>83333333333333333 83333333333333328

摘自What is the difference between '/' and '//' when used for division?的答案 我现在看到,除数运算符通常对于大于10 ^ 17的数字表现异常。因此,如果要除以大数,请使用//运算符。

编辑前(现在似乎可以忽略):

x // y和int(x / y)在Python中返回相同的结果吗?如果答案为否,则可以忽略下一行。

一些背景-

对于Codechef上的问题-problem link,我提交了两个程序,它们仅在发生除法的部分不同。

第一个解决方案https://www.codechef.com/viewsolution/24978403

import math
MOD = 1000000007
test = int(input())
for _ in range(test):
    n,k = map(int, input().split())
    first=k-1;
    diff=n-1;
    t = (first+diff)//(diff)
    y=(2*(first)-(t-1)*(diff))
    ans = (y*t)//2;
    ans = ans%MOD
    print(ans)

第二个解决方案https://www.codechef.com/viewsolution/24978385

import math
MOD = 1000000007
test = int(input())
for _ in range(test):
    n,k = map(int, input().split())
    first=k-1;
    diff=n-1;
    t = int((first+diff)/(diff))
    y=(2*(first)-(t-1)*(diff))
    ans = (y*t)//2;
    ans = ans%MOD
    print(ans)

解决方案#1通过了所有测试案例,但是解决方案#2在一个测试案例中失败了。

唯一的区别在于第8行,其中第一个解中的t计算为t = (first+diff)//(diff),第二个解中的t计算为t = int((first+diff)/(diff))

请注意,输入始终是整数,因此变量firstdiff是整数。代码在Python 3.6中。

那么python返回的x // y和int(x / y)是否不同?还是我想念其他东西?

0 个答案:

没有答案