フィルターのクリア

Sum digits after vpa(N,100) ?

3 ビュー (過去 30 日間)
Per
Per 2013 年 1 月 16 日
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?

採用された回答

Shashank Prasanna
Shashank Prasanna 2013 年 1 月 16 日
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)

その他の回答 (1 件)

Jan
Jan 2013 年 1 月 16 日
編集済み: Jan 2013 年 1 月 16 日
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.
  5 件のコメント
Jan
Jan 2013 年 1 月 16 日
編集済み: Jan 2013 年 1 月 16 日
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))
Jan
Jan 2013 年 1 月 16 日
Now I can run Matlab again. The [EDITED] version works and gives the correct result.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by