round off problem in matlab
2 ビュー (過去 30 日間)
古いコメントを表示
I have 4 variables each have 4 values (1x4) in it and I want to store all in value in 1 variable (4x4) but values are change when i do it.
MAV = [0.0924317411754942 0.0313003411430704 0.00365072354007141 0.00332056432198707]
waveLen = [172.697769103870 68.7603283596702 69.2536410243476 63.2141284111186]
zcdOut = [560 719 6155 6260]
slope_count = [478 212 4949 4830]
HG0_extracted_feature = [waveLen; MAV; zcdOut; slope_count]
it gives
173 69 69 63
0 0 0 0
560 719 6155 6260
478 212 4949 4830
note MAV values become zero, it round off waveLen, etc values...
how i correct it?
Thank you
0 件のコメント
採用された回答
Steven Lord
2019 年 9 月 19 日
Based on that display I suspect one or both of the variables zcdOut or slope_count are stored in an integer class. When you combine data stored in an integer class with data stored in a non-integer class, "all elements of the resulting matrix are given the data type of the left-most integer".
Consider converting the variable stored in an integer class to double before combining them into one array, so that the resulting matrix is also a double.
4 件のコメント
Steven Lord
2019 年 9 月 22 日
Check the types of variables using class or whos.
As Stephen Cobeldick said, to convert variables to double use the double function.
その他の回答 (2 件)
Raj
2019 年 9 月 19 日
Just add 'format longg' before your code like this:
format longg
MAV = [0.0924317411754942 0.0313003411430704 0.00365072354007141 0.00332056432198707]
waveLen = [172.697769103870 68.7603283596702 69.2536410243476 63.2141284111186]
zcdOut = [560 719 6155 6260]
slope_count = [478 212 4949 4830]
HG0_extracted_feature = [waveLen; MAV; zcdOut; slope_count]
Read about format here:
Matt J
2019 年 9 月 19 日
編集済み: Matt J
2019 年 9 月 19 日
The values are not changed. They are just displayed to the screen to 4 decimal points. Use format long to see more precision. Also, note that all elements are premultiplied by 1000.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/238838/image.png)
3 件のコメント
Matt J
2019 年 9 月 20 日
As Steven. mentioned, that is probably because one of the vectors you are merging is uint8 or similar.
Steven Lord
2019 年 9 月 20 日
Rows 3 and 4 of the resulting array have values too large for uint8 or int8 so they would need to be at least 16-bit integers.
参考
カテゴリ
Help Center および File Exchange で Function Creation についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!