[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[openoffice:10731] Re: Excel2007のバグとOOo



K.Moriyama wrote:
>  もしかして、お馬鹿なユーザのクレームに対応しようとして、Excelは
> 表示部に妙な機能を付けているのでは無いでしょうか?

私見です。
マイコンやパソコンが産まれてから二十数年もの月日が経ちました。
後述のような既知の技術的な問題については、十分にエンジニアレベルでは
知られていて対応が取られていると思います。

Excel 2007にバグ、誤った計算結果を表示
> 	http://www.itmedia.co.jp/news/articles/0709/27/news018.html

今回の一件は、65535 や 65536 付近の数値による不具合とのこと。
その数値はご存知の方も多いと思います。
2進数16ビットの正の整数で表せられる最大値が 65535 です。
0から65535までは、65536 個の整数があることになります。
つまり、それらの数値は、コンピューターにとって、少々特別な数値で
あるというわけです。

「この問題はOffice 2007でExcelの計算ロジックを変更したことに伴うものだとExcelチームは説明している。」
と記事にあります通り、Excel 2007 において、何か特別な工夫を行なった結果、
それがたまたま悪さをしてしまったということではないでしょうか。

一番簡単に思いつくのは、メモリ使用量削減の工夫です。

Excel 2003 までは、65536行 x 256列 x 256シート という上限がありました。
2007 Office System においては、そのような制限が大幅に緩和されていると聞いています。
どなたか具体的な数値をご存知ないでしょうか。

となりますと、いくら近年数GBのメモリ容量が当たり前になりつつあるパソコンだとしても、
すべてのデータをメモリ上に載せようとすると、その膨大な数のセルのデータの
記録方法に対して何かしらの工夫をする必要が出てくると思います。

例えば、同じ数値や文字列のセル同士には、固有の番号nを振り、個々のセルには
個別の同一データを記録しないようにする。固有の番号nは例えば1バイトですむ
とします。個別のデータは、数バイトから数十バイトだとします。同じ値・文字列
のセルが数百個あるとすれば、メモリ使用量の削減は数千バイトになります。

Calcにおいても、65536行の制限を撤廃すべく、さまざまな工夫を考えているようです。

浮動小数点の double 型と呼ばれる数値は、一般に 8バイトのメモリ容量を必要とします。
正の整数値 65535 は、2バイトのメモリ容量で済みます。
小さな差であっても、セルの数が多くなれば、全体的なメモリ使用量の差は大きくなってきます。
単純に 100M 個倍してみると、メモリ使用量として800MBを必要とするか、200MBでよいか。
というぐらいの違いに現れてきます。

どうでしょうか。工夫できる余地があるのであれば、工夫してみたくなりませんか。

というわけで、Excel 2007 においては頑張っている。っていうことで、
温かく見守って応援しようじゃないですか。もちろん、Calcも頑張れ!

●既知の技術的な問題
Fortran を教えていた十数年前において、すでに、
浮動小数点型の変数 x と y の値を比較して異なる処理を行なわせるには、
(c言語風ですみません)

 不正解
     if ( x == y ) {
         同じ数値だったときの処理
     }
     else {
         違う数値だったときの処理
     }

 正解
     if ( abs( x - y ) <= 0.00000000001 ) {
         同じ数値だったときの処理
     }
     else {
         違う数値だったときの処理
     }

のように、テストの回答に書かないと、落第点でした。とさ。
abs()は絶対値を返す関数。英単語 absolute の略みたいです。

もともと、浮動小数点の値は、小数点第何十桁あたりで当てにならなくなるわけで、
完全に一致するなどと考えてはいけないみたいです。
お手元の電卓などでやってみてください。
1 / 3 * 3
1 / 3 / 3 * 3 * 3
1 / 3 / 3 / 3 * 3 * 3 * 3
割り算と掛け算の数を多くしていくと、もとの1に戻ってこなくなります。



>  もし、仮にそうだと仮定すると、同じようなクレームがOOoにも
> 来ないとは限らないと思うのですが、そうゆうクレームに対する
> 対応等はどのようにしているのでしょうか?

クレームというと、苦情・文句、いんねん、というようなマイナス的なイメージですね。

例えば、こんな、不具合というか仕様がいまいちというか、があります。

  An equation =1/10 is displayed as 1/9 in Calc
  http://www.openoffice.org/issues/show_bug.cgi?id=67862

Calc でセルに =1/10 と入力し、「書式」「セル」の「数」で「分数」を指定すると、
1/9 と表示される。という現象です。まあ、よくよく調べていくと、仕様通り
のような気もしてくるのですが、なんともかんともという感じです。

という風に、Issue Tracker へ登録すればよいのではないかと。
もしくは、http://oooug.jp/faq/ にご報告くださればよいではないかと思います。

Tora

【MLコミュホームページ】http://www.freeml.com/openoffice

--[PR]------------------------------------------------------------------
 □━┓□━┓□━┓□━┓□━┓□━┓□━┓□━┓□━┓□━┓□━┓
 ┃臨┃┃時┃┃ボ┃┃ー┃┃ナ┃┃ス┃┃を┃┃ゲ┃┃ッ┃┃ト┃┃!┃
 ┗━□┗━□┗━□┗━□┗━□┗━□┗━□┗━□┗━□┗━□┗━□
▼▽ 海外旅行にお買い物……夢が次々叶っちゃう!? FISCOのメルマガ ▽▼
http://ad.freeml.com/cgi-bin/sa.cgi?id=auP9E
------------------------------------------------------------------[PR]--
■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp