小编das*_*sin的帖子

pow(NAN)非常慢

pow()NaN值的灾难性表现是什么原因?据我所知,如果使用SSE而不是x87 FPU进行浮点数学运算,NaN不应该对性能产生影响.

这似乎适用于基本操作,但不适用于pow().我将双倍的乘法和除法比作平方,然后取平方根.如果我用下面的代码编译g++ -lrt,我得到以下结果:

multTime(3.14159): 20.1328ms
multTime(nan): 244.173ms
powTime(3.14159): 92.0235ms
powTime(nan): 1322.33ms
Run Code Online (Sandbox Code Playgroud)

正如所料,涉及NaN的计算需要相当长的时间.g++ -lrt -msse2 -mfpmath=sse然而,编译会导致以下时间:

multTime(3.14159): 22.0213ms
multTime(nan): 13.066ms
powTime(3.14159): 97.7823ms
powTime(nan): 1211.27ms
Run Code Online (Sandbox Code Playgroud)

NaN的乘法/除法现在要快得多(实际上比实数更快),但是平方和取平方根仍然需要很长时间.

测试代码(在VMWare中使用32位OpenSuSE 10.2上的gcc 4.1.2编译,CPU是Core i7-2620M)

#include <iostream>
#include <sys/time.h>
#include <cmath>

void multTime( double d )
{
   struct timespec startTime, endTime;
   double durationNanoseconds;

   clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &startTime);

   for(int i=0; i<1000000; i++)
   {
      d = 2*d;
      d = 0.5*d;
   }

   clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &endTime);
   durationNanoseconds = 1e9*(endTime.tv_sec - startTime.tv_sec) + (endTime.tv_nsec …
Run Code Online (Sandbox Code Playgroud)

c++ performance nan pow

8
推荐指数
1
解决办法
678
查看次数

Matlab sin(pi)及其与机器epsilon的关系

我理解为什么sin(pi)不等于零的原因是因为没有足够的位来存储"pi"的所有有效数字,但这与机器epsilon有什么关系?

我在网上读到了什么机器epsilon,但经过一个小时的阅读,各种不同的定义措辞不同,我感到困惑,并不理解epsilon的概念.我最终对自己的愚蠢感到非常沮丧......

以下示例在MATLAB文档中给出,我不明白,有人可以向我解释该示例试图显示的内容吗?

找到从10.0到下一个最大双精度数的距离.

d = eps(10.0)

d =

   1.7764e-15
Run Code Online (Sandbox Code Playgroud)

http://www.mathworks.com/help/matlab/ref/eps.html

floating-point matlab rounding-error

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

为什么Octave打印"尺寸不匹配"而MATLAB没有?

我试图在Octave中运行MATLAB代码,但在以下方面陷入困境:

I 是一个空矩阵,尺寸为0x4,

a = 2;
Run Code Online (Sandbox Code Playgroud)

属于for循环的命令是:

I = [I a];
Run Code Online (Sandbox Code Playgroud)

MATLAB输出: I = 2

八度输出:"水平尺寸不匹配(0x4 vs 1x1)"

我找到了解决此错误的方法,但我也想了解:为什么MATLAB接受这些不同的维度而Octave会输出错误?是否有关于空矩阵的不同定义并扩展它们?(特别是因为它不是"普通"空矩阵而是0x4空矩阵?)

matlab matrix octave dimensions

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