V 8.0.4,windows 7.为什么我在这个例子中得到“没有显示数字可用”?
正如我想看看如果我可以得到更快的计算,如果我可以得到M硬件单精度运行(我不知道即使这是可能的,我是尝试新事物),我注意到,AbsoluteTiming只是时机的Pause
时,我碰巧做出精密的两倍少一点返回0,但优于单:
下面是一个例子:
我重新启动的内核,并类型
r=AbsoluteTiming[Pause[2]]
{2.00111440000,Null}
Accuracy[r]
Out[26]= 11.438897913739035
现在我的一组M翻番
$MinPrecision=$MachinePrecision;
$MaxPrecision=$MachinePrecision;
r=AbsoluteTiming[Pause[2]]
Out[32]= {2.001114400000000,Null}
Accuracy[r]
Out[33]= 15.653317853034773
没问题。
但是当我做
prec=Log[10,2]*29;
$MaxPrecision=prec;
$MinPrecision=prec;
r=AbsoluteTiming[Pause[2]]
Out[41]= {0.,Null}
你看,它是零。
Accuracy[r]
Out[42]= 307.6526555685888
但我一直想看看在哪儿它从零翻转到返回实际秒,一次尝试
我知道M使用任意精度数内部时得到这样的:
http://reference.wolfram.com/mathematica/tutorial/ArbitraryPrecisionNumbers.html
从上面的链接,它说:
In doing calculations that degrade precision, it is possible
to end up with numbers that have no significant digits at all
我在这里的问题是:有人可以解释在这个例子中的这种行为?为什么要测量只有一个Pause[]
的时间比单精度要求更精确?涉及到的计算究竟是什么,它至少需要双倍才能测量AbsoluteTime
?帮助说:
AbsoluteTiming is always accurate down to a granularity of $TimeUnit
seconds, but on many systems is much more accurate.
和
In[22]:= $TimeUnit//N
Out[22]= 0.001
其实我的主要目的,只是为了看看,如果我可以让中号使用硬件单精度浮点运行的计算,只是为了看它是否会运行得更快。我在一本书中读到一个单精度可以是双精度的两倍,并且只是试图在我注意到这一点时对其进行测试。
我目前运行在如此的M运行使用硬件双顶部
$MinPrecision = $MachinePrecision;
$MaxPrecision = $MachinePrecision;
以下的一切。
谢谢, ps。我之前检查过这个控制台,我发现没有语法错误。
好问题,我也得到同样的行为。可悲的是我无法提供明智的解释。虽然你的问题似乎很好。 – nixeagle 2011-12-25 15:03:21
你说:“我知道M使用任意精度数内部”。这通常不是事实。如果您输入的数字如1.0 mma将使用精度未跟踪的机器精度数字。 – 2011-12-25 16:59:59