我想比较浮点值以确定列表中的最大数字。浮点的精度是固定的,小数点后为 6。
我应该将它们作为整数进行比较,如果它们相等,那么去挖掘小数点后的值吗?
我想比较浮点值以确定列表中的最大数字。浮点的精度是固定的,小数点后为 6。
我应该将它们作为整数进行比较,如果它们相等,那么去挖掘小数点后的值吗?
比较浮点数的最简单方法是使用<
运算符,就像这样
if(float1 < float2)
printf("%f < %f\n", float1, float2);
执行此操作的代码如下所示:
float MinFloatArray(float *a, int n)
{
int i;
float result = MAX_FLOAT;
for (i=0; i<n; i++)
if (a[i]<result)
result = a[i];
return result;
}
这取决于你没有告诉我们的事情。
等等
由于您在浮点数组中有值,因此我将执行以下操作:
float biggest(float * values, int num)
{
int i;
float curmax;
if (num == 0) return NAN;
curmax = values[0];
for (i=1; i < num; i++) {
if (values[i] > curmax) curmax = values[i];
}
return curmax;
}
如果您想找到最大的数字,为什么还要担心比较是否相等?
以下文章提供了比较浮点值的各种替代方法.. http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
通常,找出浮点数之间的差异并检查差异是否在精度限制内,有助于比较浮点数。但正如也提到的,没有完美的答案和实现,因为相邻浮点数之间的差异随大小而变化。因此,如果您知道程序将使用的值的范围,那么您可以选择适当的实现进行比较。