为什么 Search 1D Array 不能正确找到数组中的浮点数?



主要软件:
主要软件版本: 7.1
主要软件修正版本: 7.1
次要软件: LabVIEW Development Systems>>LabVIEW Base Development System, LabVIEW Development Systems>>LabVIEW Full Development System, LabVIEW Development Systems>>LabVIEW Base Development System, LabVIEW Development Systems>>LabVIEW Full Development System

问题:
我使用的浮点数数组没有相同的值,我搜索存在的数值。但是,无论我何时使用 Search 1D Array 搜索前面板上的数值控件值,为什么都会返回 -1 的索引(意味着没有找到匹配的数值)?这经常出现在我使用数值控件上的增加或者减少箭头按钮,而不是我输入的值。

解答:
这个问题在于内在的将二进制浮点数转化为二进制格式的以 10 为基的格式的方式。由于转换可以导致近似误差,0.49 数值可能实际表示为 0.49000001。因此,Search 1D Array 应该工作正常,应该可以搜索到数组中匹配所有有效精度数字的数值。因此,忽略您使用的浮点精度类型(单精度、双精度或者扩展精度),Search 1D Array 没有找到正确的数值时您会得到错误。

解决浮点行为的办法是进行相乘运算然后取数组值的近似值。相乘运算用来将您希望匹配的所有精度数值转换为整数,取整用来舍去不需要的精度数值。比如,为了匹配 7.50,您必须乘以至少 100,然后取整到整数值。附件中的 VI 说明了错误的行为以及解决办法。

相关链接:

Developer Zone Tutorial:  NI Measurement Encyclopedia - Floating point

KnowledgeBase 23SE29KJ: How Do I Search for a Value in an Array from a Spreadsheet File Using Search 1D Array?
KnowledgeBase 3BQADSGR: The Search 1D Array Function Does Not Initialize Properly for Double and Extended Double Data Types

附件:


search_array.vi


报告日期: 06/27/2006
最近更新: 12/11/2007
文档编号: 3R0BGCHL