Asked by Per
on 16 Jan 2013

Hi MatLab!

I've stumbled across a problem. I wish to take all the first hundred digits in the square root of 2 ---> sqrt(2) and sum them up.

I first use

N=sym('sqrt(2)'); vpa(N,100)

which gives me alot of digits. But when I try to num2str the answer it cant be done. How can I achieve this?

*No products are associated with this question.*

Answer by Shashank Prasanna
on 16 Jan 2013

Accepted answer

Here you go:

clear all

digits(100);

N=vpa(sym('sqrt(2)'));

sumA = 0;

for i = 1:100

sumA = sumA + (floor(N*(10^(i-1))) - 10*floor(N*10^(i-2)));

end

disp(sumA)

Answer by Jan Simon
on 16 Jan 2013

Edited by Jan Simon
on 16 Jan 2013

Could you operate on the VPA number instead of converting it to a string? I do not have the Symbolic Toolbox, but I guess:

s = 0; x = vpa(N, 100); for ii = 1:100 s = s + floor(x); x = rem(x, 1) * 10; end

Does this work?

[EDITED]

N = sym('sqrt(2)'); x = vpa(N, 100);

s = 0; for ii = 1:100 f = floor(x); s = s + f; x = (x - f) * 10; end

If rounding error appear, try it with 200 digits in the VPA command. Please use this as inspiration - as I said already, I do not have the corresponding toolboxes.

Show 2 older comments

Jan Simon
on 16 Jan 2013

Then let's debug your algorithm:

x = 1.414213562373095... -> iteration starts x = x*10-floor(x)*10 = 14.14213... - 1 * 10 = 4.14...; s = s + 4;

Does the 1 not matter? And why do the loop stop at 99, when you need 100 elements?

Another test:

S = ['1.41421356237309504880168872420969807856967187537694807', ... '3176679737990732478462107038850387534327641572735013846', ... '230912297024924836055850737212644121497099935831']; D = S - '0'; sum(D(3:102))

Opportunities for recent engineering grads.

## 0 Comments