フィルターのクリア

round off error in mtimes

1 回表示 (過去 30 日間)
Clare
Clare 2016 年 6 月 14 日
コメント済み: Clare 2016 年 6 月 15 日
I've noticed that mtimes produces a slightly different answer than the answer I would get from multiplying two vectors directly. Does anyone have any insights on why it's the case?
For example: z is a small single-precision floating point array
z =
0.6970215
0.7363197
0.7967772
0.8811227
0.9433413
Using mtimes: z'*z = 3.3291292 Direct method: sum(z.^2) = 3.3291297
Notice how the last decimal place is different? For my problem, I'm computing a bunch of array multiplications in a loop, and this small error gets propagated. The final result using mtimes can be quite different compared to just doing the calculations by hand.
What's causing the difference? Is the small error in mtimes to be expected?
  5 件のコメント
Roger Stafford
Roger Stafford 2016 年 6 月 14 日
The difference between your two results, 3.3291292 and 3.3291297, for single precision numbers is just two of the least bits in their 24-bit significands. That is perfectly acceptable in such a computation. If you want higher accuracy, you should use double precision.
Clare
Clare 2016 年 6 月 15 日
Thanks for all of your comments.
The direct method, sum(z.*z), is also applied on single-precision floating point numbers z, so the result 3.3291297 from the direct method isn't exact either.
My take-away is that mtimes uses highly optimized math to calculate matrix multiplication, and the error you get from mtimes is perhaps slightly larger, but the result is still perfectly acceptably. I'll switch to double-precision and see if it might work. (the system is memory constrained).

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

回答 (0 件)

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by