当前位置: 首页 > 知识库问答 >
问题:

为什么x=x*y/z对于整数给出与x*=y/z不同的结果?

艾谦
2023-03-14

我有以下功能:

pub fn s_v1(n: &u64) -> u64 {
    let mut x: u64 = 1;

    for i in 1..=*n  {
        x = x * (*n + i) / i;
    }

    x
}

此代码给出了s_v1(

但是,如果我将for循环中的行更改为x*=(*ni)/I

答案变为< code>s_v1(

为什么结果不同?x = x * y 不是和 x *= y 一样吗?


共有1个答案

赵俊晤
2023-03-14

因为*/具有与左关联性相同的优先级,所以表达式不是x*((*n i)/i)(与相同x*=(*n i)/i)但(x*(*n i))/i

 类似资料:
  • 问题内容: 考虑以下示例: 我不确定Java语言规范中是否有一项规定要加载变量的先前值以便与右侧()进行比较,该变量应按照方括号内的顺序进行计算。 为什么第一个表达式求值,而第二个表达式求值?我本来希望先被评估,然后再与自身()比较并返回。 这个问题与Java表达式中子表达式的求值顺序不同,因为这里绝对不是“子表达式”。需要 加载 它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的,

  • 这部分是学术性的,就我的目的而言,我只需要四舍五入到小数点后两位;但我很想知道发生了什么会产生两种略有不同的结果。 这是我编写的测试,将其缩小到最简单的实现: 但它失败了,输出如下: 有谁能详细解释一下是什么原因导致 我在一个答案中寻找的一些要点是:精度损失在哪里?哪种方法是首选的,为什么?哪一个实际上是正确的?(在纯数学中,不可能两者都是对的。也许两者都是错的?)对于这些算术运算,有没有更好的解

  • 问题内容: 我将如何在SELECT查询中反转此路径: 为了 其中/是定界符,并且在一行中可以有许多定界符 问题答案: 最简单的方法可能是编写一个存储的pl / sql函数,但是可以单独使用SQL(Oracle)来完成。 这将分解子路径中的路径: 然后,我们使用来重构反向路径:

  • 这个问题与Java表达式中子表达式的求值顺序不同,因为在这里肯定不是“子表达式”。需要加载它进行比较,而不是“求值”。这个问题是特定于Java的,表达式来自一个真实的项目,而不是通常为棘手的面试问题而设计的牵强附会的不切实际的构造。它应该是比较和替换习语的一行替换 它比x86 CMPXCHG指令还要简单,因此在Java中应该使用更短的表达式。

  • 如果可以简化此场景,我想让我的病情更易于阅读和漫游: 这将摆脱大量的括号和变量重复,以及“听起来”合乎逻辑(至少对我来说):如果这个var x是这样或那样,那么我就这样做。 特别是当x是一些长对象引用时,例如: 或者,您如何处理逻辑上“简单”但繁琐的编写条件?

  • 问题内容: 做这个: 意思是这样的: 如果是这样,我对Dive Into Python中的示例5.14 完全感到困惑。密钥如何既等于“名称”又等于项目?另一方面,“和项目”是否只是问项目是否作为变量存在? 问题答案: 意味着。 请记住,这有几种可能。例如将评估为。