mulpicaton加法

xxx*_*xxx -5 php

我读了一个维基说,为CPU增加倍增!

来自维基:

Pass the only weight-1 wire through, output: 1 weight-1 wire
Pass the two weight-2 wires through, outputs: 2 weight-2 wires
Add a full adder for weight 4, outputs: 1 weight-4 wire, 1 weight-8 wire
Add a full adder for weight 8, and pass the remaining wire through, outputs: 2 weight-8 wires,     1 weight-16 wire
Add a full adder for weight 16, outputs: 1 weight-16 wire, 1 weight-32 wire
Pass the two weight-32 wires through, outputs: 2 weight-32 wires
Pass the only weight-64 wire through, output: 1 weight-64 wire
Run Code Online (Sandbox Code Playgroud)

我不明白整个,但我认为如果它不知道如何添加传递并继续下一步,它会不断添加.这里全文:http://en.wikipedia.org/wiki/Dadda_tree

我做了很多研究,我觉得它很慢.因此,我不想让CPU进行乘法运算.

我写了这个函数:

function do_multiply($a, $b)
{
    while($b > 0) { 
        $a = $a + $a;
        $b = $b-1;
}
Run Code Online (Sandbox Code Playgroud)

我想要做的就是如果我要求函数乘以2和3,我想加2到3,三次,对吗?

所以我想这样做:

2+2+2
Run Code Online (Sandbox Code Playgroud)

这与2*3相同,对吗?

当我运行它时它给了我16.为什么我得到了错误的答案?

T.J*_*der 6

为什么它不起作用?

假设该问题与此代码有关:

function do_multiply($a, $b)
{
    while($b > 0) { 
        $a = $a + $a;
        $b = $b-1;
}
Run Code Online (Sandbox Code Playgroud)

......那么我可以立即看到三个原因:

  1. 你永远不会返回一个值
  2. 如果$b是否定的,那么,这个函数的要花费很长的时间才能完成,而且它会返回错误的答案(因为你减去1$b,你需要处理其中的情况$b已经否定,可能与abs-一定阅读乘以负数的结果).
  3. 您需要$a 在进入函数时添加,而不是在每次传递时加倍.考虑:从$a= 3,$b=开始2.在第一个循环中,您正在设置$a = $a + $a,因此它变为6.但随后在第二循环中,要添加$a$a试(6+ 6),而不是添加3($a原始值)$a.

  • @xxxkellyxxx:恩,没有.@TJ表示,如果`$ b`是一个负数值,你的代码将不起作用,值得指出.这不是幼儿园,在这里我们指着某人说"他先开始了". (2认同)

kjl*_*kjl 5

看看你的循环,你正在增加$ a错误;

第一次迭代:$ a = 2 + 2(所以$ a = 4)

第二次迭代

$ a = 4 + 4(所以$ a = 8)

第三次迭代

$ a = 8 + 8

您需要在循环外声明一个变量并添加到该变量.

$ total = $ total + $ a

  • 另外一个用于解释原始代码的流程是如何错误的,以便op可以在精神上成长并有机会成为程序员. (2认同)