- ベストアンサー
VBの誤差ですか?
VBを始めたばかりです。 sin(3.141592)を計算すると近似値とはとてもいえない、変な値(6.5358...E)がでるのです。このEは指数のことでしょうか。 どのようにすればうまくいきますか? 初歩的な質問で申し訳ございません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 > Eの続きがなかったのです。 > なので、本当に指数なのかどうかがわからなくて質問させていただきました。 なるほど。 途中の処理などで、切れてしまっていたのかもしれませんね。 今回の場合であれば、「6.535897E-07」(小数点以下の桁数は適当) でしたので、これが出力部分でなんらか変形したのかも、ですね。 今回の場合もそうですが、以下の点についてまとめてあると回答もしやすいので、ご参考ください。 ■VisualBasicのバージョン →6.0とそれ以降でコードや結果が大きく変化するためです。 今回は多分VB6.0だと思いますが。 ■問題のある部分のソースコード →抜粋で大丈夫です。 質問の内容を確認できる関数部分だけとかでもあると、 どこでひっかかっているか、などを回答者も絞ることができます。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17070)
>VBを始めたばかりです 質問者は文系ですね。 (1)Eを知らないのは、指数表示を知らないのでしょう・ WEBで照会すれば沢山解説が出てくる。勉強のこと。 (2)それにエクセルのサイン関数やVBのSin関数は、引数はラジアンで指定するの知ってますか。 エクセルにはPI()関数(定数)があるが、VBでは無いようですから Const CPi As Single = 3.1416 ' 円周率の値 のように定義します。 Sub test01() Pi = 3.141592 MsgBox Sin(30 * Pi / 180) End Sub では数学的には0.5なんだがそうはならない http://salv.miscnotes.com/1998/03/vb5singledouble.php >sin(3.141592)を計算すると これは何をやろうとしたのかな。 ーー >VBの誤差ですか 学生さんならこれから勉強するのでやむをえないが、SEを目指すプロの卵などなら、他社技術者などを前にしてはこういう状態では・・・・。
お礼
ご回答ありがとうございます。 他の計算をしていたのですが、正弦がからむ計算がどうもおかしくなってしまい、ためしに直接3.14…(180度)をいれて直接計算してみたのです。その結果が0の近似値とは思えなかったので質問させていただきました。
- eitetsu
- ベストアンサー率64% (22/34)
Eは指数を示します。 今回の場合、E-08ぐらいの値が表示されていたのでは無いでしょうか。 どのようにすればうまくいくか、というのがはっきりしませんが、 以下のようなもので解答になるでしょうか? 1)=0となるようにしたい →Round関数などを使い、一定値以下を切り捨てるなど 2)なるべく正確なπの値を入力したい →入力の桁数を手動で増やす →atan(アークタンジェント)などを使い、πの逆計算を行う
お礼
Eの続きがなかったのです。 なので、本当に指数なのかどうかがわからなくて質問させていただきました。 ご回答、これからの参考にさせていただきます。 ありがとうございました。
>変な値(6.5358...E)がでるのです。このEは指数のことでしょうか。 指数のことですね。計算結果は1より小さい数字になりますから。 >どのようにすればうまくいきますか? 考えられる方法としてはFormat関数を使うものがあります。何桁まで表示するか指定してやれば表示されますから。Format(Sin(3.141592),"0.000000")と書いて計算すればEが付くことはありません。 ただ、6.5358...Eという結果はおかしいですね。Sin(3.141592)で計算すると自分の方では0.054803653となったので指数を使って表しても5.4803653E-02といった感じになるはずですし。
お礼
ご回答、ありがとうございます。 Format関数、使ってみました。こちらはうまくいきました。 ありがとうございます。 Eがついてもかまわないのですが、値に納得できなかったのです。 指数部がないんですよ。 エクセルは使ったことがあるのでEは指数のことかな?とは思ったのですが、6.5358...E ??読めませんでした。
>変な値(6.5358...E)がでるのです。このEは指数のことでしょうか。 そうですわ sin(3.141592)なのでほぼ0というような値になっているはずですね
お礼
ご回答ありがとうございます。 6.5358...Eというのは 6.53 * 10^の…何乗なんでしょうか…。
お礼
そうなんですか。切れてしまうことがあるのですね。 質問の仕方についてのご指導ありがとうございます。 必要な情報が足りなくて、意図を理解しにくい質問になってしまっていたんですね。これから質問する際は教えていただいた点、きちんと明記するようにいたします。 >今回は多分VB6.0だと思いますが。 はい、そうです。 丁寧なご回答、ありがとうございました。