matlab
默认的数据类型是
double(64
位
)
。
double
是双精度浮点数,保留
16
位有效数字
。
双精度到底是几位,与你的系统有关的,如果你的系统是
32
位的,那么一般双精度是
64
位,单精度就是
32
位,这个规律不是万能的,总之与你的系统有关。
自己试验的结果:
opencv
和
matlab
中
double
类型的数,都只有
16
位的准确位数。
遇到问题:
matlab
往
xml
写入
double
型数组时,用
dataElement.appendChild(docNode.createTextNode(sprintf('%f',mat_input(i,j))));
出现的问题是,
0.000000 0.009261 0.176968 0.007195 0.000000 0.008346
等。这
样,原本是
double
类型的数组就被截成了小数点后六位的精确度。显然数据损失了。
解决方法:
dataElement.appendChild(docNode.createTextNode(sprintf('%1.15f',mat_input(i,j))));
这样就解决了精度的问题了。
0.000000000000449 0.009260753386601 0.176968253826983
0.007194591900531 0.000000000066297
遗留问题:
之一:
0.000000000000449
在
matlab
中是
4.491631742909341e-13
之二:
'%1.15f'
是保证了
“
小数点前
1
位,小数点后
15
位
”
的格式存储。问题是,如果不知
道数据的
16
位小数点前后分配情况,怎么保证格式?
遇到问题:
matlab
中,
dtElement.appendChild(docNode.createTextNode(sprintf('%s','
d
')));
一定要注意存储数据的格式
d
:
double
f
:
float
这样才能保证在
opencv
读取
xml
时的精度保证。