Ticket #13719

軸を対数表示したときの目盛りが誤っている
Open Date: 2008-10-20 22:52 Last Update: 2010-11-24 10:12

Reporter:
Owner:
Type:
Status:
Closed
Component:
(None)
MileStone:
(None)
Priority:
8
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

軸を対数表示にしたときに、目盛りが誤って表示される。

具体的には、以下のデータを Scalar-XY でグラフ化して
X軸を対数表示したときに、10^3 となるべき目盛り数字が
10^2 と表示される。

100,100
500,500
1000,1000
5000,5000
10000,10000

Ticket History (3/3 Histories)

2008-10-25 23:48 Updated by: kuromaru
  • Owner Update from (None) to kuromaru
2009-02-08 23:06 Updated by: kuromaru
  • Resolution Update from None to Fixed
Comment

対数表示した軸の目盛り数字には"10n"(nは整数)という形で表現される数値を用いているが、 この10の肩に乗る数字を決定する処理にエラーがあった。 浮動小数点数による計算では、入力値dについて a=log(d)/log(10) という値を求めて、この値を int型にキャストする処理によって n=(int)a という値を得ている。

しかし、浮動小数点数の丸め誤差により、この方法では正しい値が得られない場合がある。 例えば、目盛りの数値としてd=1000という値が入力された場合、数学的にはnは明らかに3に等しい のだが、上記の計算でaとして得られる値は2.999...というもので、これをキャストして得られる値は n=2になり、数値1000に対応する目盛りとして"102"という誤った文字列が用いられてしまう。

そこで、得られたnの値に1を足した値の10のべき乗、すなわち 10(n+1) の値を求めて、 その値が入力値dと浮動小数点数として一致している場合には、nを1だけインクリメントするように 修正した。 この修正によって、これまでエラーを起こしていた数値も含めて、対数表示した軸の目盛り数字には エラーが発生しなくなったことを確認した。

※JREの1.5以降ではMathクラスのlog10(double)というメソッドが利用可能で、この場合には 入力値1000に対して正しく3という値を返してくれるのだが、JRE1.4以上に対応しているとする Samurai Graph では、現時点では利用できない。

2010-11-24 10:12 Updated by: kuromaru
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2010-11-24 10:12
Comment

バージョン 2.0.0 のリリースに伴い close します。

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login