HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0422
Sasser小数の掛け算について7解決


Sasser

リンク

2008/4/22(Tue) 18:35:51|NO.15303

初歩的な質問ですみません。
HSP 2.6からのユーザーなのですが、
小数の掛け算(具体例は下記記載)をしようとしたのですが
2.XはDLLの使い方が分からなかったのであきらめて3.1を使ったのですが
以下の計算が合いません…ご教授お願いします。

1.0001を二乗しようとしました。
HSP 3.1使用
 
suzi=1.0001 keisan=suzi*suzi mes "結果"+keisan+"" stop

これを計算しても1.000200としかならず、
1.00020001となりません。

これ以降、1.0001の三乗、四乗…として、100乗…と計算したいのですが
どのようにすれば正しい計算ができますでしょうか?

それから変数の桁数に制限ありましたでしょうか?

よろしくお願いしますm_m



この記事に返信する


SYAM

リンク

2008/4/22(Tue) 19:45:46|NO.15305

プログラミングマニュアルの「式」のところに桁数(扱える値の範囲)の制限について書いてあります。
とりあえず変数を使って100乗は無理だと思いますさすがに。



SYAM

リンク

2008/4/22(Tue) 19:57:27|NO.15306

ちなみに、計算自体は2乗くらいならできてます。表示するときだけ100倍してみてください。
ただし、そのうち変数の範囲を越えるのと、2進法で表現する際の誤差が発生しますから、うまくいかないことには変わりありませんが…。



ANTARES

リンク

2008/4/23(Wed) 00:02:02|NO.15321


suzi=1.0001 keisan=1.0 i=1 repeat 20 keisan*=suzi mes strf("i=%2d",i)+strf(" 結果=%.15f",keisan) i++ loop stop



ANTARES

リンク

2008/4/23(Wed) 00:12:22|NO.15323

「%.15g」も試してください。



ANTARES

リンク

2008/4/23(Wed) 00:51:07|NO.15324

11乗まで検算してみましたが(我ながらヒマな奴ちゃ)、
小数第15位を四捨五入するなら合っています。
i=8のときの結果を考えると有効数字15桁は確保できているようなので、
100乗まで行っても15桁は信じていいような気がします。


screen 0,640,544 suzi=1.0001 keisan=1.0 i=1 repeat 100 keisan*=suzi pos x,y mes strf("%3d",i)+strf(" %.15g",keisan) i++ y+=16 if y+16>ginfo_winy { y=0 x+=176 } loop



ANTARES

リンク

2008/4/23(Wed) 01:29:33|NO.15325

Active Basicで「print 1.0001^100」とやったら1.0100496620929でした。
BCC5.5でやってみたら1.010049662092875でした
Windowsの電卓では1.0100496620928765688550188629073



Sasser

リンク

2008/5/2(Fri) 00:02:41|NO.15582

返信大変遅れてすみません。
単なる掛算もこんなスクリプトで表現しないといけないとはびっくりです。

あとでVBSとPower関数で比較しながらやってみました。ありがとうございました。m_m



ONION software Copyright 1997-2021(c) All rights reserved.