如何将浮点输入转换为整数并保持最大精度?

时间:2012-09-13 12:22:04

标签: c floating-point floating-accuracy floating-point-precision floating-point-conversion

我必须使用一种算法,它需要一个整数矩阵作为输入。我的输入是实值的,因此我想在将输入传递给算法之前将输入转换为整数。

我虽然通过一个大常量缩放输入然后将其四舍五入为整数。这看起来是一个很好的解决方案,但是如何确定一个好的常数,特别是因为浮动输入的范围可能因情况而异?还欢迎任何其他想法吗?

2 个答案:

答案 0 :(得分:2)

这个问题的最佳一般答案可能是找出算法可以接受的最大整数值作为矩阵中的一个元素而不会导致算法本身出现溢出。获得此最大值后,在输入数据中找到最大浮点值,然后按这两个最大值的比例缩放输入并舍入到最接近的整数(避免截断)。

在实践中,您可能无法执行此操作,因为您可能无法确定算法可以接受的最大整数值是多少而不会溢出。也许您不知道算法的细节,或者它以复杂的方式依赖于所有输入值。如果是这种情况,您只需选择一个似乎运行良好的任意最大输入值。

答案 1 :(得分:0)

首先将输入标准化为[0,1)范围,然后使用常用方法缩放它们:

f(x) = range_max_exclusive * x + range_min_inclusive

之后,将f(x)(或如果您希望的圆)转换为整数。通过这种方式,您可以处理实际值在[0,1)[0,n) where n>1范围内的情况。

通常,您最喜欢的库包含矩阵运算,您可以轻松实现此技术,并且性能优于可能的实现。

编辑:按比例缩小然后按比例缩小肯定会失去一些精确度。我赞成它,因为归一化操作通常伴随着库。你也可以通过以下方式做到这一点:

f(x) = range_max_exlusive / max_element * x + range_min_inclusive