MATLAB Indexing type dependence (bug?)

Please see this strange example, where the datatype (single vs double) of the starting index affects how many data points are returned:
y = rand(67347456+50,1);
y = single(y);
N = single(50);
size(y(N+1:end))
MATLAB returns: >> 67347454 1 (incorrect, missing 2 elements)
size([N+1:length(y)])
MATLAB returns: >> 1 67347456 (which is correct)
and
size(y(double(N)+1:end))
MATLAB returns >> 67347456 1 (also correct)
Other datatypes like uint32 also work fine.
Please help me understand: If N is only 50, what does it matter to the indexing whether it is a single or a double? Also, aren't these ending index values well within the presicion of single?

 採用された回答

Stephen23
Stephen23 2025 年 2 月 20 日
移動済み: Stephen23 2025 年 2 月 21 日

0 投票

"what does it matter to the indexing whether it is a single or a double?"
Because single precision cannot represent all of those indices. The largest index is:
y = rand(67347456+50,1);
x = numel(y)
x = 67347506
which cannot be represented using SINGLE. The closest SINGLE value is:
single(x)
ans = single 67347504
"...aren't these ending index values well within the presicion of single?"
Nope, those indices are well above FLINTMAX:
flintmax('single')
ans = single 16777216
"MATLAB Indexing type dependence (bug?)"
I do not see anything that indicates a bug.

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2025 年 2 月 20 日

0 投票

eps(single(67347456+50))
ans = single 8
single precision numbers are 8 apart by the time of 67347456

カテゴリ

ヘルプ センター および File ExchangeMatrix Indexing についてさらに検索

製品

リリース

R2024b

質問済み:

Ben
2025 年 2 月 20 日

移動済み:

2025 年 2 月 21 日

Community Treasure Hunt

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

Start Hunting!

Translated by