【发布时间】:2020-04-07 14:39:28
【问题描述】:
对于 x 的某些值(x 是 long 类型),
x %= (1e9+7);
和
x %= 1_000_000_007;
给出不同的答案。知道为什么会这样吗?
另外,这种下划线格式 (1_000_000_007) 在不同语言中是否通用?除了增强可读性之外,它还有其他优点吗?
【问题讨论】:
-
第一个值
1e9+7是double,第二个值1_000_000_007是int。x的类型是什么? -
x 是 long 类型
-
明白了。
x的值是多少,对x进行两次操作的结果分别是什么? -
正如你所指出的,我认为问题是由于 double vs int。我没有
x的值,但是如果我使用 double 值,mod 之后的值是 862275785,如果我们使用 int 值,则为 862275791。 -
6的差异是由浮点运算引起的。见:Is floating point math broken?