相关疑难解决方法(0)

为什么在计算数组的中间时更喜欢start +(end-start)/ 2 over(start + end)/ 2?

我见过程序员使用这个公式

mid = start + (end - start) / 2
Run Code Online (Sandbox Code Playgroud)

而不是使用更简单的公式

mid = (start + end) / 2
Run Code Online (Sandbox Code Playgroud)

用于查找数组或列表中的中间元素.

他们为什么使用前者呢?

c algorithm

159
推荐指数
3
解决办法
9546
查看次数

如果表达式的中间结果溢出,它是未定义的行为吗?

这个问题是另一个SO问题的结果.

示例代码

#include <iostream>

int main()
{
    unsigned long b = 35000000;
    int i = 100;
    int j = 30000000;
    unsigned long n = ( i * j ) / b; // #1
    unsigned long m = ( 100 * 30000000 ) / b; // #2
    std::cout << n << std::endl;
    std::cout << m << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

产量

85
85

编译此代码g++ -std=c++11 -Wall -pedantic -O0 -Wextra会发出以下警告:

9:28: warning: integer overflow in expression [-Woverflow]

问题

  1. 我是否正确地思考#1 …

c++ integer-overflow

5
推荐指数
1
解决办法
670
查看次数

标签 统计

algorithm ×1

c ×1

c++ ×1

integer-overflow ×1