Finding self-locating loops in pi, receiving "Index exceeds the number of array elements. Index must not exceed 50."

1 回表示 (過去 30 日間)
Hi, as per title I came into this error. Is this related to memory or perferences perhaps?
% Define the number of digits to use from pi
numDigits = 100000;
% Load the first numDigits digits of pi into a string
piStr = num2str(pi, numDigits);
% Loop over all possible loop lengths
for loopLen = 1:floor(numDigits/2)
% Loop over all possible starting positions for the loop
for startPos = 1:numDigits-loopLen*2
% Extract the loop and the following sequence from piStr
loopStr = piStr(startPos:startPos+loopLen-1);
seqStr = piStr(startPos+loopLen:startPos+loopLen*2-1);
% Check if the loop appears again in seqStr
if contains(seqStr, loopStr)
fprintf('Found self-locating loop of length %d\n', loopLen);
fprintf('Loop starts at position %d\n', startPos);
fprintf('Loop sequence: %s\n', loopStr);
fprintf('Following sequence: %s\n', seqStr);
end
end
end
Found self-locating loop of length 1
Loop starts at position 18
Loop sequence: 1
Following sequence: 1
Found self-locating loop of length 1
Loop starts at position 21
Loop sequence: 9
Following sequence: 9
Found self-locating loop of length 1
Loop starts at position 31
Loop sequence: 4
Following sequence: 4
Index exceeds the number of array elements. Index must not exceed 50.

回答 (1 件)

chicken vector
chicken vector 2023 年 6 月 1 日
編集済み: chicken vector 2023 年 6 月 1 日
The error comes from the fact that 50 is the maximum number of digits for pi.
You can have a proof of this by doing:
nDigits = 60;
num2str(pi, nDigits)
ans = '3.141592653589793115997963468544185161590576171875'
num2str(pi, ['%.' num2str(nDigits) 'f'])
ans = '3.141592653589793115997963468544185161590576171875000000000000'
Note that double precision floating point numbers have 16 digit of accuracy.
  1 件のコメント
Stephen23
Stephen23 2023 年 6 月 1 日
編集済み: Stephen23 2023 年 6 月 1 日
50 is anyway well beyond the limits of double binary floating point:
3.141592653589793115997963468544185161590576171875 % 50 DOUBLE
3.141592653589793238462643383279502884197169399375105820974944 ... actual
% ^ oops

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

カテゴリ

Help Center および File ExchangeTiming and presenting 2D and 3D stimuli についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by