- ベストアンサー
variant型にした場合、精度は落ちるのでしょうか?
スピードや.NETに移行する場合は、currency型のままで良いのはわかりますが、より広い型を扱うようにバリアント型にしました。 同じようにint, long, single, double, currency型のデータをvariant型にして計算した場合の精度について詳しい方、教えてください。 また、COM+でVARIANT型みたいなのがあるようですが、VBのバリアントと同じものなのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答2の方がおっしゃるとおり、計算に使用する値や変数の型によります。 例えば、 Dim varVal1 as Variant varVal1 = 1! / 3! '結果はSigle型精度 varVal1 = varVal1 / 3# '結果はDouble型精度 varVal1 = varVal1 + 2@ '結果はCurrency型精度 varVal1 = varVal1 / 3# '結果はDouble型精度 となります。 誤差とかも結果の型と同じように発生します。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
再度質問しているようだが、 http://hp.vector.co.jp/authors/VA021605/vb/Dimension.htm のVariant型の解説を読めばわあるように >(1)精度について 論じる視点軸とと、データ型が当初決めないという性格と、視点軸があってないのを質問していると思いませんか。 (2)メモリを沢山消費する、(3)ミクロ的にスピードが落ちる とかの視点軸で論じられるが、精度では論じられない(意味が無い)。 代入の右辺に来た変数の型に従います、ということではないですか。 右辺にはVBで認められる型=精度も決まっている、しか来ないのではないですか。 それにVatiant型は勧められていないようだから、余り詮索する必要も無いと思う。 http://iijima.auemath.aichi-edu.ac.jp/pw/programming/pukiwiki.php?VB6%A4%AB%A4%E9VB2005%A4%D8 >variant型から, 型の明示へ ーー まあ他の方の良い回答があればよいが。 やや難しい質問の場合、プロ級の方に見てもらわないとダメなので、土日休日に質問を出すのは得策じゃないように経験から思う。
- gatyan
- ベストアンサー率41% (160/385)
多分、Variant型にしたからといって、単純な計算なら演算精度が落ちる事はないと思います…型宣言付きの変数で演算した場合と比べて Variant型は保持しているデータの型を取得できるので、型宣言付きの時と同じく適切に型変換されてから演算時が実行される事を期待できます 注意しないといけないのは、暗黙の変換が行われる場合ではないでしょうか? a="0.1" a=a*2 の結果は、Double型で0.2になります(多分) 精度(誤差)を気にしてCurrency型で演算する/結果が欲しいなら a=ccur(a)*2 みたいにしないとだめですよね?(Currency*Integerとして計算させる) …ここでは、aに"0.1"という文字列が入っているので、ccur()で誤差はでないはず a=ccur(a*2)にしても結果はCurrency型になりますが、チョット意味が違うってのはわかりますよね ぁ、割り算のほうが例としては良かったかも