考虑一个简单的函数来划分两个浮点数,
float floatDiv(float x, float y)
{
float z;
z = x/y;
return z;
}
所有我能想到的是y==0
它有未定义的行为。还有其他人?
答案 0 :(得分:3)
溢出和下溢是两个陷阱,其中除法的真实结果不能保存在数据类型中。这个例子显示了两者。在第二种下溢情况下,该值太小而无法表示,变为0.0
#include <stdio.h>
#include <float.h>
int main(){
float large, small;
large = FLT_MAX / FLT_MIN;
printf ("%f\n", (double)large);
small = FLT_MIN / FLT_MAX;
if (small == 0.0f) printf("Zero\n");
return 0;
}
节目输出:
1.#INF00
Zero
其中一个可能作为计算的中间步骤发生,因此从预期结果的范围可能不明显。其中一个实际的例子是计算指数级数与总计+
和-
项的总和,例如sin(x)
的系列。
答案 1 :(得分:1)
使用浮点的一个缺陷是准确性,因为与未准确表示的值相比,可以精确表示的值集非常小。
鉴于:
z = x / y;
表达式:
z * y
可能不等于x
并且取决于浮点表示的精度能力。