[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/02/09(Fri) 20:52
投稿者名:おじん
Eメール:
URL :
タイトル:
XP サービスパック1と2の違い
同じソースを使い2台のパソコンで結果が違うのは何故か?。
OSはサービスパックが1と2で違い、他の違いはありません。
ツールは、VB6,sp4で、同じです。

やっていることは、
点A(x1,y1)と点B(x2,y2)を結ぶ直線の中点に垂線を引く。
点Bは点Aを中心に任意の角度回転し中点に垂線を引く。これを続けます。
この時、中点の座標の計算が違うケースが発生します。この原因が
わかりません。

サービスパック2は正常に実行します。
違うのは、0-20度(見かけ度),180度です。

何か調べてみることでもありましたら、教えてください。
よろしくお願いいたします。

投稿時間:2007/02/10(Sat) 09:45
投稿者名:y4yama
Eメール:
URL :
タイトル:
Re: XP サービスパック1と2の違い
> 同じソースを使い2台のパソコンで結果が違うのは何故か?。
> OSはサービスパックが1と2で違い、他の違いはありません。
> ツールは、VB6,sp4で、同じです。

#回答ではないですけど、
2台のパソコンのHW仕様は、同じですか。つまりPentium4とかAthronとか。
(昔と違い、今の数値演算は、ソフトなのかプロセッサー任せなのかと、ふと疑問に思いました)
シロート考えですが、VB6,sp4が返すPIの値に興味があります。
AMD-K6,win98SEのEXCEL2000では、Math.Atn(1.0) * 4 や ACOS(-1.0)は、3.141592653589790000000
と出ますが・・それが同じなら、あとは浮動小数点演算が何か違うのでしょうかねぇ

投稿時間:2007/02/10(Sat) 10:27
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: XP サービスパック1と2の違い
>OSはサービスパックが1と2で違い、他の違いはありません。
逆に、Windows のサービスパックを当てて改善するのでしょうか?
どうせ必要な事なのでSP2 にして確認されたらいかがですか?

案外違うところに原因があるかも知れません。
たとへば、VB6.0 のサービスパックが SP4 なので、こちらもSP6 を当ててみる事が
必要かと。どちらにしても開発環境は最新のサービスパックを当てておく事をお勧め
します。
SP4 で改善はされているようですが、下記のような事もあります。
[VB6] SP4: 最適化コンパイルによる浮動小数点演算の問題

投稿時間:2007/02/10(Sat) 16:22
投稿者名:おじん
Eメール:
URL :
タイトル:
Re: ありがとうございました
y4yama様、花ちゃん様、ありがとうございます。

HW(cpu)はPentium4とCeleronです。Pentium4は正常(思うように描画)
Celeronの方が原因不明の描画をします。
値をdebugする限り値は正常に計算されています。

Windows のサービスパックを当てましたが結果は同じです。
VB6.SP6は当てませんでした。ご指導いただきましたのに
従いませんことご容赦ください(両パソコンともSP4のため)。

今朝からあれこれやっていて、今までに経験しなかった、
気がつかなかったことがあります。このことが関係するのではと
もう少し調べてみます。

気がつかなかったこととは、

width=350Pixels,height=600PixelsのPictureBoxで、
左上を原点(0,0)とし、例えば、
Dim a!,x!,y!
x=500
y=a*x
Picture.Line (0,0)-(x,y)

を実行しY=axのグラフを描画する場合、
x=300の時、aは7以下、同様に、
x=400、a=6以下、x=500はa=5以下、x=600はa=4以下だけが正常の
グラフを表示します。(傾きが変化することを期待する)

例えば、x=300の時、a=7とa=8以上ではグラフが変化しません。
これ以外細かく調べていませんが、理由がわかりません。
a,x,yの値は正常に計算されています。

グラフを描くときこんなこと気にしたことはありません。
Pentium4のパソコンでも同じなのか現在は調べることができません。

もともとの質問もこのことが関係していると思われます。

いつも変な質問ばかりで申し訳ありません。
ありがとうございました。

投稿時間:2007/02/10(Sat) 17:12
投稿者名:おじん
Eメール:
URL :
タイトル:
Re^2: 追記
もうひとつ、パソコンでの違いがあることを思い出しました。
Pentiumの方のモニターは1280で、Celronは1024です。
そこでCelronで800にして同様のテストをしてみましたところ、
結果に変化がありました。ということはこれが影響するという
ことでしょう。
参考までに、先の、
width=350Pixels,height=600PixelsのPictureBoxで、
左上を原点(0,0)とし、例えば、
Dim a!,x!,y!
x=500
y=a*x
Picture.Line (0,0)-(x,y)
については影響ありませんでした。が、当初の問題は部分的に
解決しました。
引き続き調べたいと思います。

モニターの解像度を考慮しなければならないとは面倒なこと
です。何かよい方法ははいものでしょうか。

とりあえず、今、分かったことです。