添加双值的逻辑

时间:2012-04-16 11:03:05

标签: c# java

我在接受采访时得到了以下问题......

Compute the following sum:
1/2 + 1/4 + 1/8 + ... + 1/1048576    

我被告知这是一个逻辑问题,他们不是在寻找源代码,但我的答案如下......

    private static double computeSum(){
        double x = 0.0;
        for(double i=2; i<=1048576; i*=2){
            x += (1 / i);
        }
        return x;         
    }

这个问题的正确逻辑答案是什么?

4 个答案:

答案 0 :(得分:11)

我向fi提供了这笔钱,我会说答案是1 minus the nth term,所以在你的情况下它是

1 - 1/1048576 = 1048575/1048576

我不会做任何数学或代码或任何事情。我想这就是他们正在寻找的那种答案。

我可以通过说1/2 + 1/4 = 3/4 = 1 - 1/4; //在这里编辑

来展示一些“有效”
1/2 + 1/4 + 1/8 = 7/8 = 1 - 1/8

答案 1 :(得分:3)

总和:

1/2 + 1/4 + 1/8 + ... + 1/1048576

相当于:

(1 + 2 + ... 2 ^ 20) / (2 ^ 20) - 1 =
(2 ^ 21 - 1) / (2 ^ 20) - 1 =
2 - 1 / (2 ^ 20) - 1 =
1 - 1 / (2 ^ 20) ~= 0.99999

如果系列的长度增加,总和将倾向于1。

答案 2 :(得分:0)

他们正在将馏分加在一起,直到他们得到一个具有非常微不足道的值的1/1048576。这意味着上述答案将非常接近于1而不是一个答案。

答案 3 :(得分:0)

这是一个简单的convergent geometric series

  s=a+ar+ar^2+ar^3+... to infinity

所以总和是

s=1/(1-r) where in this case r =1/2

但是,我们正在寻找s-a,因为给定的系列从1/2而不是1开始。因此

s-a = 1/(1-r) - a = 1/(1-1/2) -1 = 1.

为什么他们称之为logic问题我不清楚,除了他们可能想要解释为什么给定的几何级数收敛 - 这是一个简单的证明:即任意两个连续项之间的比例是常数小于1。