0

我有整数 XY 和 Z

我有这个公式用于填充 float[][] 数组

公式是 x/(y*(x+z) 其中所有 3 都是整数

但是当计算的值为0时,这绝对不是我检查xy和z的值。

我该如何防止这种情况并改为显示浮点值?

提前谢谢了

4

3 回答 3

2

您必须将整数(或只是第一个)转换为 float :

float result = ((float)x)/(y*(x+z));

这将使/操作员从操作中产生一个浮点数。

不要忘记检查你没有被零除。

于 2012-10-13T09:32:24.190 回答
0

尝试这个:

float a = x / (1.F * y * (x + z));
于 2012-10-13T09:58:51.663 回答
0

我假设你正在做这样的事情:

floats[i][j] =  x / (y * (x + z));

问题是 RHS 的计算是使用整数算术完成的……因为所有的值都是整数。特别是,除法是整数除法,这意味着(例如)如果0 <= x < (y * (x + z),则表达式的计算结果最多为零。

解决方案是强制使用浮点运算执行除法。

问题的第二个方面是存在整数溢出的风险。特别是,y * (x + z)如果一个或多个输入太大,子表达式可能会溢出。这将导致该部分计算的值非常不正确。

溢出问题的解决方案是强制整个计算以浮点数进行……而不仅仅是最后的除法;例如

floats[i][j] =  x / (y * ((float) x + z));

最后,如果您希望结果准确(或尽可能准确),您可能应该使用double而不是float. 问题float在于它只表示最大精度为 24 位的数字。这大约是 7 位十进制数字。除非性能或存储很重要,否则double它是首选,因为它可以为您提供 53 位的精度。这大约是 14 位十进制数字。

于 2012-10-13T09:57:24.433 回答