数值文字0.e0f是什么意思?

时间:2014-07-16 10:00:01

标签: c literals openblas

我目前正在尝试调试未初始化的内存错误。我现在遇到OpenBlas源代码中的数字文字0.e0f(这是调试器当前所在的)这是什么意思?

上下文是这样的:

if ((alpha_r == 0.e0f) && (alpha_i == 0.e0f)) return;

0.e0f显然评估为0。

4 个答案:

答案 0 :(得分:5)

浮点文字有两种语法。第一部分由以下部分组成:

  • 非空的十进制数字序列,包含小数点字符(定义有效数字)
  • (可选)e或E后跟可选的减号或加号以及非空的十进制数字序列(定义指数)
  • (可选)后缀类型说明符为l,f,L或F

第二部分由以下部分组成:

  • 非空的十进制数字序列(定义重要)
  • e或E后跟可选的减号或加号和非空的十进制数字序列(定义指数)
  • (可选)后缀类型说明符为l,f,L或F

后缀类型说明符定义浮点文字的实际类型:

  • (无后缀)定义了double
  • f F定义浮动
  • l L定义long double

答案 1 :(得分:3)

f浮点指标

eX是X的幂的指数值。例如e5表示10到5的100000.或e-3表示0.001。

结合两个

1.23e-3f --> 1.23 x 10 ^ -3 = 0.00123

通过扩展您的示例,它是

0.e0f --> 0.0 x 10 ^ 0 = 0.0 (in floating point format)

PS:一种有用的编程习惯。 从未(参见PS2)比较两个浮点数是否相等。

有些值无法用浮点几乎近似来表示。 像这个例子

0.3 + 0.6 = 0.89999999999999991 != 0.9

改为使用:

float a;
float b;

....

if( abs(a-b) < FLT_EPSILON )

FLT_EPLISON是一个非常小的浮点值1.0 + FLT_EPSILON != 1.0。 (例如0.1e-10)(引自@AlterMann)

abs是浮点绝对函数的缩写;在std中fabs。也可以在其他具有不同名称的库中找到。

PS 2:好的......从来没有像现在这么强大。我并不是说这段代码既不是算法也不是语法错误。问题本身有点简单,虽然这个警告可能有助于新程序员在这里结束。

正如在评论中所述,此代码示例适用于检查。 0检查是有效的操作,因为浮点表示的当前标准保证0可以表示。

答案 2 :(得分:0)

科学记数法为零,为单精度浮点数,带有冗余小数点。它与0e0相同。

答案 3 :(得分:0)

这是0类型的float

参见C99标准(http://port70.net/~nsz/c/c99/n1256.html#6.4.4.2

中的6.4.4.2

在我看来,无论0alpha_r

的类型如何,普通alpha_i都会更好
if ((alpha_r == 0) && (alpha_i == 0)) return;