我目前正在尝试调试未初始化的内存错误。我现在遇到OpenBlas源代码中的数字文字0.e0f(这是调试器当前所在的)这是什么意思?
上下文是这样的:
if ((alpha_r == 0.e0f) && (alpha_i == 0.e0f)) return;
0.e0f显然评估为0。
答案 0 :(得分:5)
浮点文字有两种语法。第一部分由以下部分组成:
第二部分由以下部分组成:
后缀类型说明符定义浮点文字的实际类型:
答案 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
。也可以在其他具有不同名称的库中找到。
正如在评论中所述,此代码示例适用于检查。 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在我看来,无论0
和alpha_r
alpha_i
都会更好
if ((alpha_r == 0) && (alpha_i == 0)) return;