Jw_cad作者さんのサイトの掲示板で以下の発言がありました
計算誤差の話 というのは 昔からありますね。
例えば
図形を回転移動させて、再度、逆向きに同じだけ回転移動させたあと、水平線の角度を取得すると 0°になっていない(誤差が出ている)、みたいな話。
atan(0.2) の値は、Jw_cad では 11.30993247 と出ますけれども
実際、倍精度計算結果では、11.3099324740202 ですし。
1000*Tan(11.3099324740202*PI/180) = 200
となりますが
1000*Tan(11.30993247*PI/180) = 199.999999927028
なので。
でもまぁこの辺は結構キワな話ですよねぇ。
1000*Tan(11.3099324740202/180*PI) = 199.999999999999
となるし。
だからまぁ 丸め処理が行われるのが普通なんだけども
寸法値や測定値には、少ない桁数で丸め処理が行われますけれども
でもまぁ
角度値が 有効桁数10桁で丸められて、
尚且つ、
1000*Tan(11.30993247*PI/180)
= 199.999999927028
→ 有効桁数10桁で丸められて、
= 199.9999999
となってしまうのも ある意味 仕方がないような気もするけれども。
計算して、計算して、最終結果の直前に丸め処理が行われる。
これが普通だけど
角度値を出す = 処理終了
長さを出す = 処理終了
という2段階を踏んでいる以上、丸め処理も2回行われ、
計算結果に細かい差異が出る
というのもありきたりな話な訳で・・・
倍精度の場合の有効桁数は 15桁でラスト1桁は誤差含むから 14桁なんだけども(浮動小数点=0.・・・×10の何乗 状態での小数点以下桁数) それじゃ 長さや角度で 14桁まで出してくれたらいいんじゃないか? みたいな話もあるかもしれないけれども、でもそれは、計算を積めば積む程、結論としては どっちにしろ誤差って出てくるんだよね。コンピュータの計算そのものが、もともと、誤差を含んでいるものだし。
だから結局、勾配 0.2 よりも高さ 200 のほうが大切なんであれば、高さ 200 の方で作図をする方がいいし、勾配 0.2 の方が大切なのであれば、そっちで作図すればいい。結果的に、寸法線をはって、その値が合っていればOKでしょう、みたいな事で完結する話かもしれないし。
まぁ、気持ち悪いかもしれないけど
ユーザーにとっては、不具合と思うかもしれないけど
別段、バグでも何でもなく、そういう仕様。
どのヴァージョンからの不具合かはっきりとはわからないのですが、
例えば、底辺の長さ1000を底辺として、勾配atan0.2の線を斜辺として引き、三角形の高さとして垂直線を引き、斜線との交点と底辺と垂直線の交点とを2点長さ取得コマンドで図ると、本来なら200が正解なのですが、199.9999999999となります。
寸法コマンド、測定コマンドではちゃんと200となります。
2点長さや間隔取得にて作図することが多いので不都合があり、質問させていただきました。
皆さんは、そういう症状はございませんか?
当方の環境は
JWW 8.03a 32bit WINDOWS10です。
PCでも、タブレットでも同じ症状です
よろしくお願いいたします。
計算誤差の話 というのは 昔からありますね。
例えば
図形を回転移動させて、再度、逆向きに同じだけ回転移動させたあと、水平線の角度を取得すると 0°になっていない(誤差が出ている)、みたいな話。
atan(0.2) の値は、Jw_cad では 11.30993247 と出ますけれども
実際、倍精度計算結果では、11.3099324740202 ですし。
1000*Tan(11.3099324740202*PI/180) = 200
となりますが
1000*Tan(11.30993247*PI/180) = 199.999999927028
なので。
でもまぁこの辺は結構キワな話ですよねぇ。
1000*Tan(11.3099324740202/180*PI) = 199.999999999999
となるし。
だからまぁ 丸め処理が行われるのが普通なんだけども
寸法値や測定値には、少ない桁数で丸め処理が行われますけれども
でもまぁ
角度値が 有効桁数10桁で丸められて、
尚且つ、
1000*Tan(11.30993247*PI/180)
= 199.999999927028
→ 有効桁数10桁で丸められて、
= 199.9999999
となってしまうのも ある意味 仕方がないような気もするけれども。
計算して、計算して、最終結果の直前に丸め処理が行われる。
これが普通だけど
角度値を出す = 処理終了
長さを出す = 処理終了
という2段階を踏んでいる以上、丸め処理も2回行われ、
計算結果に細かい差異が出る
というのもありきたりな話な訳で・・・
倍精度の場合の有効桁数は 15桁でラスト1桁は誤差含むから 14桁なんだけども(浮動小数点=0.・・・×10の何乗 状態での小数点以下桁数) それじゃ 長さや角度で 14桁まで出してくれたらいいんじゃないか? みたいな話もあるかもしれないけれども、でもそれは、計算を積めば積む程、結論としては どっちにしろ誤差って出てくるんだよね。コンピュータの計算そのものが、もともと、誤差を含んでいるものだし。
だから結局、勾配 0.2 よりも高さ 200 のほうが大切なんであれば、高さ 200 の方で作図をする方がいいし、勾配 0.2 の方が大切なのであれば、そっちで作図すればいい。結果的に、寸法線をはって、その値が合っていればOKでしょう、みたいな事で完結する話かもしれないし。
まぁ、気持ち悪いかもしれないけど
ユーザーにとっては、不具合と思うかもしれないけど
別段、バグでも何でもなく、そういう仕様。


このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。