比较C中的浮点值
我想比较浮点值以确定列表中的最大数字。浮点的精度是固定的,小数点后是6比较C中的浮点值,c,floating-point,floating-point-conversion,C,Floating Point,Floating Point Conversion,我想比较浮点值以确定列表中的最大数字。浮点的精度是固定的,小数点后是6 我是否应该将它们作为整数进行比较,如果它们相等,则去挖掘小数点后的值?这取决于您没有告诉我们的内容 这些数字是如何提供给您的?作为字符串,还是它们已经在内存中(浮点数组/双数组) 它们有多大?为了达到一定的精度,有没有最大的界限?也就是说,如果数字是,比如说,1亿,那么6位小数是否相关 失去精度可以吗 等等 由于您有浮点数组中的值,我将执行以下操作: float biggest(float * values, int n
我是否应该将它们作为整数进行比较,如果它们相等,则去挖掘小数点后的值?这取决于您没有告诉我们的内容
- 这些数字是如何提供给您的?作为字符串,还是它们已经在内存中(浮点数组/双数组)
- 它们有多大?为了达到一定的精度,有没有最大的界限?也就是说,如果数字是,比如说,1亿,那么6位小数是否相关
- 失去精度可以吗
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;
}
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最大值(float*值,int num)
{
int i;
浮动curmax;
如果(num==0)返回NAN;
curmax=值[0];
对于(i=1;icurmax)curmax=值[i];
}
返回curmax;
}
这取决于你没有告诉我们的事情
- 这些数字是如何提供给您的?作为字符串,还是它们已经在内存中(浮点数组/双数组)
- 它们有多大?为了达到一定的精度,有没有最大的界限?也就是说,如果数字是,比如说,1亿,那么6位小数是否相关
- 失去精度可以吗
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;
}
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最大值(float*值,int num)
{
int i;
浮动curmax;
如果(num==0)返回NAN;
curmax=值[0];
对于(i=1;icurmax)curmax=值[i];
}
返回curmax;
}
如果你想找到最大的数字,为什么要担心比较是否相等?如果你想找到最大的数字,为什么您需要担心比较是否相等?比较浮动的最简单方法是使用比较浮动的最简单方法是使用代码执行此操作,如下所示:
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;
}
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-MinFloatArray(float*a,int-n)
{
int i;
浮动结果=最大浮动;
对于(i=0;i代码,执行此操作的代码如下所示:
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;
}
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-MinFloatArray(float*a,int-n)
{
int i;
浮动结果=最大浮动;
对于(i=0;i使用DBL_EPSILON作为接近双倍的基础
使用FLT_EPSILON exists表示浮点数
有关演示该技术的示例函数,请参阅。使用DBL_EPSILON作为基础,以确定需要接近double的程度
使用FLT_EPSILON exists表示浮点数
有关演示该技术的示例函数,请参阅。以下文章提供了有关比较浮点值的各种替代方法。。
通常,找出浮点数之间的差异并检查差异是否在精度限制内,有助于比较浮点数。
但正如前面提到的,没有完美的答案和实现,因为相邻浮点数之间的差异随大小而变化。因此,如果您知道程序将使用的值的范围,那么您可以选择适当的实现进行比较。下面的文章提供了关于比较浮点数的各种备选方案价值观
通常,找出浮点数之间的差异并检查差异是否在精度限制内,有助于比较浮点数。
但是,正如前面提到的,没有完美的答案和实现,因为相邻浮点数之间的差异随大小而变化。因此,如果您知道程序将使用的值的范围,那么您可以选择适当的实现进行比较。您所指的确切含义是什么“将它们作为整数进行比较,如果它们相等,则在小数点后挖取值”?我的意思是,首先使用“==”号进行比较,如果它们仍然相同,则执行其他操作(不确定是什么)。如果它们相同,则它们是相同的。然后您还会做什么?尝试放置一些代码行,以向我们展示这些“浮动”是什么“是。你所说的“将它们作为整数进行比较,如果它们相等,则在小数点后挖掘值”是什么意思?我的意思是,首先使用“==”号进行比较,如果它们仍然相同,则执行其他操作(不确定是什么)。如果它们是相同的,那么它们是相同的。那么你还会做什么?试着放几行代码,告诉我们这些“浮动”是什么是。数字在浮点数组中。数字通常不大,但没有指定用户定义的最大边界。6位小数总是相关的。不,失去精度是不好的。好的,因为你有一个浮点数组,你可能已经丢失了(不是loost)精度。在这种情况下,我只需定义一个变量并在列表上迭代,每当发现一个大于该变量的值时更新该变量。数字位于浮点数组中。数字大多不大,但没有指定用户定义的最大边界。6个小数总是相关的。不,放松精度是不好的.好的,由于您有一个浮点数组,您可能已经丢失了(不是loost)精度。在这种情况下,我只需定义一个变量并在列表中迭代,每当发现一个大于该变量的值时,就更新该变量。最高精度是多少?<运算符比较这两个浮点值。@Harman浮点数是完全有序的。给定任意两个非特殊数字a和b,正好是以下其中一个s true,ab。不涉及公差。高达浮点值固有的精度。这主要是5到6位小数。高达什么精度,<运算符比较两个浮点值。@Harman浮点数是完全有序的。给定任意两个非特殊数字a和b,以下正好一个为true,ab。不涉及公差。Up浮点值固有的精度。这主要是5到6位小数。@Harman,我不明白。你有浮点值吗