【发布时间】:2018-03-08 06:50:59
【问题描述】:
问题示例:
计算 123 * 456 比计算 123456 * 7890 快吗?还是一样的速度?
我想知道 32 位无符号整数,但我不会忽略其他类型(64 位、有符号、浮点数等)的答案。如果不同,是什么原因造成的?位是否为 0/1?
编辑:如果有区别,我应该澄清我指的是任何数字(两个低于 100 的随机数与两个高于 1000 的随机数)
【问题讨论】:
-
这真的不是一般基础可以回答的问题,因为它高度依赖于目标平台和可能的编译器。对于您的特定编译器和目标,您始终可以将每个乘法执行一百万次,并检查执行它所需的时间。
-
没有 C/C++。 C 和 C++ 是不同的语言。两者都没有给你任何速度保证。你需要问一个关于你的平台的问题,而不是关于编程语言的问题。
-
你至少需要指定CPU。这是一个关于硬件和架构的问题。与 C++ 无关。
-
AFAIK,一个 C 编译器和一个 C++ 编译器(内部)没有比
int或unsigned更小的类型的乘法。因此,如果至少有一个值存储在变量中,则 123 * 456 和 123456 * 7890 将编译为int*int。 (常量在编译时相乘。)例外是优化 2 的幂,如前所述。 -
有些原子处理器的 8 位 division 效率更高……因此 gcc 的
-m8bit-idiv,但它更多的是例外而不是规则。你会发现这种事情的一个地方是在极其精简的指令集架构中,其中乘法是一条微编码指令。嗯。让我想知道:“nand accumulator bit with current bitstack and swap bit-stacks if false”机器图灵完成了吗?
标签: c++ c optimization integer-arithmetic