为什么这段代码,
const float x[16] = { 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8,
1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6};
const float z[16] = {1.123, 1.234, 1.345, 156.467, 1.578, 1.689, 1.790, 1.812,
1.923, 2.034, 2.145, 2.256, 2.367, 2.478, 2.589, 2.690};
float y[16];
for (int i = 0; i < 16; i++)
{
y[i] = x[i];
}
for (int j = 0; j < 9000000; j++)
{
for (int i = 0; i < 16; i++)
{
y[i] *= …Run Code Online (Sandbox Code Playgroud) c++ floating-point performance compilation visual-studio-2010
确定给定的浮点数arg是否正常,即既不是零,也不是正常,无限,也不是NaN.
数字为零,无限或NaN很清楚它意味着什么.但它也说低于正常.什么时候是一个数字次正常?
我正在读一本C书,谈论浮点范围,作者给出了表:
Type Smallest Positive Value Largest value Precision
==== ======================= ============= =========
float 1.17549 x 10^-38 3.40282 x 10^38 6 digits
double 2.22507 x 10^-308 1.79769 x 10^308 15 digits
Run Code Online (Sandbox Code Playgroud)
我不知道最小正值和最大值列中的数字来自哪里.
在长时间搜索性能错误后,我读到了非正规浮点值.
显然,非规范化的浮点值可能是主要的性能问题,如此问题所示: 为什么将0.1f更改为0会使性能降低10倍?
我有一个Intel Core 2 Duo,我正在使用gcc进行编译-O2.
那我该怎么办?我可以以某种方式指示g ++避免非正规值吗?如果没有,我可以以某种方式测试一个float是否是非正规的?
我一直在查看我正在查看的 vb 代码中对特定值的引用,并想知道是否有人对重要性有任何线索。
var_ret_1 = Int((6.37066138261923E-314 / 32))
和
loc_0046BBAE: Var_Ret_2 = CDbl((6.37066138261923E-314 - 6.37066138261923E-314))
loc_0046BBC4: fcomp real8 ptr var_5C
loc_0046BBE3: Err.Raise
loc_0046BBE9:
loc_0046BBF5: If word ptr [ecx] < 0 Then GoTo loc_0046BBFD
loc_0046BBF7: Err.Raise
loc_0046BBFD:
loc_0046BC00: shl eax, 04h
loc_0046BC03: edi+edi*4 = edi+edi*4 - word ptr var_28
loc_0046BC0E: shl eax, 04h
loc_0046BC11: esi+esi*4 = esi+esi*4 - word ptr [ecx]
loc_0046BC38: Var_Ret_3 = CDbl((6.37066138261923E-314 - 6.37066138261923E-314))
loc_0046BC4E: fcomp real8 ptr var_68
loc_0046BC6F: edi = word ptr [eax] - 1```
Run Code Online (Sandbox Code Playgroud)