2012-04-16 3 views
1

я получил следующий вопрос в интервью ...Логика добавления двойных значений

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;   
    } 

Что такое правильный логического ответа на этот вопрос?

+1

У меня такое ощущение, что с использованием удвоений реализовано, вы в итоге получите ровно 1. Конвергенция серии Power в сочетании с ограниченной точностью. Я также добавил тег интервью-вопросов на ваш вопрос. – bdares

+0

да, ответ примерно как 0.99999 – Xerxes

+1

Это конвергентная серия, это сумма - это что-то вроде a0 * (1/q), где a0 - первый элемент последовательности, q = a0/a1. Не помните, на самом деле, это из программы средней школы :), если такая серия (с q = 1/2) бесконечна, ее сумма равна 1. – J0HN

ответ

11

я фи была представлена ​​с этой суммы я бы сказал, что ответ 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 
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 

Сумма будет иметь тенденцию к единице, если длина серии увеличивается.

0

Они добавляют фракции вместе, пока они не придумали фракции 1/1048576, которая имеет очень незначительную величину. Это означает, что ответ на вышеизложенное будет очень близок к 1, но не к одному.

0

Это простой convergent geometric series

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

Так сумма

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

Однако мы ищем са, так как данная серия начинается на 1/2, а не на 1. следовательно

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

Почему они называют это проблемой logic, неясно мне, кроме что им может понадобиться объяснение, почему данный геометрический ряд сходится, что является простым доказательством: т. е. отношение между любыми двумя последовательными членами является константой меньше 1.

Смежные вопросы