相关疑难解决方法(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万
查看次数

使用比浮动更快的双倍?

双值存储更高的精度并且是浮点数的两倍,但英特尔CPU是否针对浮点数进行了优化?

也就是说,双重操作与+, - ,*和/的浮点运算一样快或快.

对于64位架构,答案是否会改变?

c++ performance x86 intel osx-snow-leopard

66
推荐指数
7
解决办法
2万
查看次数

什么是"非正常数据"? - C++

我想对"非正常数据"以及它的内容有一个广泛的看法,因为我认为我唯一正确的事情是从程序员的角度来看与浮点值特别相关的事实,它与一般事项有关 -从CPU角度看计算方法.

有人可以为我解密这2个字吗?

编辑

请记住,我是面向C++应用程序而且只面向C++语言.

c++ hardware floating-point cpu

18
推荐指数
3
解决办法
6868
查看次数

从硬件架构的角度来看,为什么非规范化浮点数比其他浮点数慢得多?

与法线相比,已知非正规性表现不佳,大约100倍左右.这经常导致意外的软件问题.

我很好奇,从CPU架构角度来看,为什么非正规数必须是多慢?缺乏表现是否是他们不幸的表现所固有的?或者CPU架构师可能会忽略它们以减少硬件成本(错误的)假设非正规无关紧要?

在前一种情况下,如果非正规本质上是硬件不友好的,那么是否已知非IEEE-754浮点表示在零附近也是无间隙的,但是对于硬件实现更方便?

floating-point cpu-architecture

15
推荐指数
1
解决办法
911
查看次数

将非规范化数字刷新为零

我在网上搜索无济于事.

有没有办法让Xcode和Visual C++将非规范化数字视为0?我原以为IDE首选项中有一个选项可以启用此选项,但似乎无法找到它.

我正在做一些跨平台音频的东西,需要停止某些处理器占用资源.

干杯

c++ audio xcode visual-studio-2010

7
推荐指数
1
解决办法
4727
查看次数

当值变小时,为什么这些计算需要20倍的时间

我是电路设计师,而不是软件工程师,所以我不知道如何追踪这个问题.

我正在使用一些IIR过滤器代码,当我通过过滤器处理极小的值时,我遇到极慢的执行时间问题.为了找到问题,我写了这个测试代码.

通常,循环将在大约200毫秒左右运行.(我没有测量它.)但是当TestCheckBox-> Checked时,它需要大约7秒才能运行.问题在于环路内A,B,C和D的大小减小,这正是IIR滤波器输入变为零后的值所发生的情况.

我认为问题在于变量的指数值小于-308.一个简单的解决方法是将变量声明为long double,但这在实际代码中并不是一个简单的修复,而且我似乎不应该这样做.

任何想法为什么会发生这种情况以及简单的修复可能是什么

如果它很重要,我使用的是C++ Builder XE3.

int j;
double A, B, C, D, E, F, G, H;
//long double A, B, C, D, E, F, G, H; // a fix
A = (double)random(100000000)/10000000.0 - 5.0;
B = (double)random(100000000)/10000000.0 - 5.0;
C = (double)random(100000000)/10000000.0 - 5.0;
D = (double)random(100000000)/10000000.0 - 5.0;
if(TestCheckBox->Checked)
 {
  A *= 1.0E-300;
  B *= 1.0E-300;
  C *= 1.0E-300;
  D *= 1.0E-300;
 }
for(j=0; j<=1000000; j++)
{
 A *= 0.9999;
 B *= 0.9999;
 C …
Run Code Online (Sandbox Code Playgroud)

c++ x86 c++builder

5
推荐指数
2
解决办法
593
查看次数

对于非常接近零的值,双重计算运行速度要慢得多

朋友要求我分享过去一段时间我偶然发现的事情.原帖是从这里获取的.问题陈述可以在这里找到.基本上是算法竞赛的网站.

我被解决了使用以下代码解决的算法问题:

double dp[80002][50];
class FoxListeningToMusic {
public:
    vector <double> getProbabilities(vector <int> length, int T)  {    
        memset(dp, 0, sizeof(dp));
        int n = length.size();
        for(int i = 0; i < n; i++)
            dp[0][i] = 1.0 / (double)n;

        double mul = 1.0 / (double)n;
        int idx ;
        for(int i = 1; i <= T; i++) {
            for(int j = 0; j < n; j++)  {
                idx = i - length[j];
                if(idx >= 0)  {
                    for(int k = 0; …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm floating-point performance

3
推荐指数
1
解决办法
186
查看次数

为什么icc会为简单的主要部件生成奇怪的装配?

我有一个简单的程序:

int main()
{
    return 2*7;
}
Run Code Online (Sandbox Code Playgroud)

GCC和clang优化启动时会生成2指令二进制,但icc会产生奇怪的输出.

     push      rbp                                           #2.1
     mov       rbp, rsp                                      #2.1
     and       rsp, -128                                     #2.1
     sub       rsp, 128                                      #2.1
     xor       esi, esi                                      #2.1
     mov       edi, 3                                        #2.1
     call      __intel_new_feature_proc_init                 #2.1
     stmxcsr   DWORD PTR [rsp]                               #2.1
     mov       eax, 14                                       #3.12
     or        DWORD PTR [rsp], 32832                        #2.1
     ldmxcsr   DWORD PTR [rsp]                               #2.1
     mov       rsp, rbp                                      #3.12
     pop       rbp                                           #3.12
     ret
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly code-generation icc

3
推荐指数
1
解决办法
165
查看次数