推荐于2018-04-12
展开全部
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))));
出现的问题是,<data>0.000000 0.009261 0.176968 0.007195 0.000000 0.008346等。这样,原本是double类型的数组就被截成了小数点后六位的精确度。显然数据损失了。 解决方法:
dataElement.appendChild(docNode.createTextNode(sprintf('%1.15f',mat_input(i,j)))); 这样就解决了精度的问题了。
<data>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时的精度保证。
望采,谢谢
double是双精度浮点数,保留16位有效数字 。
双精度到底是几位,与你的系统有关的,如果你的系统是32位的,那么一般双精度是64位,单精度就是32位,这个规律不是万能的,总之与你的系统有关。
自己试验的结果:opencv和matlab中double类型的数,都只有16位的准确位数。
遇到问题:
matlab往xml写入double型数组时,用
dataElement.appendChild(docNode.createTextNode(sprintf('%f',mat_input(i,j))));
出现的问题是,<data>0.000000 0.009261 0.176968 0.007195 0.000000 0.008346等。这样,原本是double类型的数组就被截成了小数点后六位的精确度。显然数据损失了。 解决方法:
dataElement.appendChild(docNode.createTextNode(sprintf('%1.15f',mat_input(i,j)))); 这样就解决了精度的问题了。
<data>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时的精度保证。
望采,谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询