相关疑难解决方法(0)

为什么将0.1f改为0会使性能降低10倍?

为什么这段代码,

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

1491
推荐指数
5
解决办法
14万
查看次数

浮点运算中的flush-to-zero行为

虽然,据我所知,IEEE 754没有提及关于刷新到零的模式来更快地处理非规范化数字,但是一些架构提供了这种模式(例如http://docs.sun.com/source/806-3568/ncg_lib .html).

在本技术文档的特定情况下,非规范化数字的标准处理是默认值,并且必须明确激活flush-to-zero.在默认模式下,非规范化数字也在软件中处理,这比较慢.

我在嵌入式C的静态分析器上工作,试图预测在运行时可能发生的值的正确(如果有时不精确)范围.它的目的是正确的,因为它可用于排除在运行时出现错误的可能性(例如对于关键的嵌入式代码).这需要在分析期间捕获所有可能的行为,因此在浮点计算期间产生所有可能的值.

在这方面,我的问题是双重的:

  1. 在嵌入式架构中,是否存在仅提供从零到零的架构?他们可能没有权利将自己宣传为"IEEE 754",但可以提供足够接近IEEE 754风格的浮点运算.

  2. 对于在嵌入式环境中提供两者的体系结构,可能不会被系统激活为零,以使反应时间更可预测(这些嵌入式系统的常见约束)?

在我用于浮点值的区间运算中处理flush-to-zero非常简单,如果我知道我必须这样做,我的问题是我是否必须这样做.

c embedded floating-point ieee-754

13
推荐指数
1
解决办法
4278
查看次数

如果将最小正浮点值乘以非零数,是否可以保证非零结果?

如果我带epsilon是最小正的非零浮点数(无论是16,32,或64位)和乘以epsilon由相同尺寸的非零浮点值:

我保证一个非零结果的的符号相同的原始值?或者我冒险舍入错误(零或切换标志)?

环境:Python/Numpy

python floating-point precision numpy

4
推荐指数
2
解决办法
438
查看次数