« HSPTV!メルマガ 第63号 | メイン | 【よみもの】もーりおのつぶやき 第32回 »

2008年08月01日

【講座】「教えて!おにたま!!」

<高田 さんからのおたより>

現在HSP3では、通常、どうも小数点以下6桁まで計算する
ようですが、これを、小数点以下8桁まで計算させることは
できるのでしょうか。
(ヘルプファイルのどこを参照すればいいのでしょうか。)

実は、レンズ設計を勉強中で、光線追跡の計算をHSPで
やらせたいと思っています。そのため出来れば、8桁まで、
なのですが、6桁まで、ということでしたら、それはそれで
ある程度使えるとは思いますが・・・。
よろしくお願いします。


<こたえ>

お便りありがとうございます。
HSP3の実数計算は、64bit浮動小数点という形式を使って
行なわれています。これは、小数点の位置を数値ごとにうまく
ずらすことで、非常に小さな小数値も、巨大な数でも表現
することができる頭のいい方法です。
で、通常の表示では確かに小数点以下6桁までしか表示
されていません。たとえば、以下のスクリプトでは
「1÷3」ということで「0.333333」が表示されます。

a = 1.0 / 3
mes a

しかし、内部ではもっと細かい値まで計算されています。
strf関数を使って、表示桁数を指定してみましょう。

a = 1.0 / 3
mes strf("%.16f",a)

この例では、小数点以下16桁まで表示しています。
さっきも書いたように、浮動小数点は小数が移動するので、
必ず小数点以下16桁が有効になるわけではありません。
たとえば、「10.333」のように整数部分が2桁ある場合は、
小数点以下の桁数もそれに引きずられて少なくなります。
ただ、小数点の位置は別にして、だいたい15~16桁程度まで
計算することができるようになっています。
通常、6桁までしか表示していないのは、あまりにも桁数が
多い時にかえって読みにくくなるのを抑えるためと、それほど
小数点以下の精度が必要な場面が少ないと考えているためです。
内部では、もちろん高い精度で計算されています。あくまでも、
表示の時に少ない桁数になってしまっているだけです。

それでは、またまた。HSPに限らず、PCのコトや
プログラミング関係どんなことでもお便り待っていますね。

(おにたま)

投稿者 usuaji : 2008年08月01日 11:46

口臭チェッカー市場