V 8.0.4、windows 7この例では「何も表示できません」と表示されるのはなぜですか?
ハードウェア単精度でMを実行すると高速な計算ができるかどうかを確認しようとしていましたが(これが可能であってもわかりません。私はAbsoluteTimingを私はダブルより少し精度を作るために発生したときだけPause
タイミングに0を返すことに気づいた)事をしようとしますが、シングルよりも良い:ここで
私はカーネルを再起動し、タイプ
r=AbsoluteTiming[Pause[2]]
{2.00111440000,Null}
Accuracy[r]
Out[26]= 11.438897913739035
は今、私は
$MinPrecision=$MachinePrecision;
$MaxPrecision=$MachinePrecision;
r=AbsoluteTiming[Pause[2]]
Out[32]= {2.001114400000000,Null}
Accuracy[r]
Out[33]= 15.653317853034773
問題ありませんが倍増するMを設定します。
しかし、私はあなたが見
prec=Log[10,2]*29;
$MaxPrecision=prec;
$MinPrecision=prec;
r=AbsoluteTiming[Pause[2]]
Out[41]= {0.,Null}
を行うとき、それはゼロです。
Accuracy[r]
Out[42]= 307.6526555685888
しかし、私はMが内部の任意精度数値を使用しています知っている
を、それがゼロから実際の秒を返すに反転する場所を正確に確認するためにしようとし続け、1トライ中にこれを得ました:上記のリンクから
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
を測定するには、少なくとも2倍の計算が必要です。ヘルプは言う:
In[22]:= $TimeUnit//N
Out[22]= 0.001
AbsoluteTiming is always accurate down to a granularity of $TimeUnit
seconds, but on many systems is much more accurate.
と
は実際に私の主な目的は、私はMはそれがより高速に実行するかどうかだけ確認するために、ハードウェアの単精度浮動小数点を使用して計算を実行させることができるかどうかを確認することだけでした。単精度は倍精度の2倍の速さで、これに気づいたときに私が持っているものをテストしようとしていたという本を読みました。Mは、ハードウェアのダブルを使用して実行されるように私は現在、トップ
$MinPrecision = $MachinePrecision;
$MaxPrecision = $MachinePrecision;
で次ですべてを実行します。
ありがとう、 ps。前回のコンソールでこの時間を確認しましたが、構文エラーはありません。
良い質問ですが、私もここでも同じような動作をします。残念ながら私は分かりやすい説明をすることはできません。あなたの質問はよく聞かれるようです。 – nixeagle
あなたは「私はMが内部的に任意精度の数値を使用していることを知っています」と言っています。それは一般的には真実ではありません。 1.0 mmaのような数値を入力すると、精度が追跡されない機械精度の数値が使用されます。 –