わわわ,とんでもないバグ:Slashdot | Excel 2007 Multiplication Bug。いま試せないのですが,どなたか =850*77.1 のような計算をしてみてください。
Excel 2007 で 100,000 になりますね (Excel 2003 SP2 では 65,535)。=2550*25.7 は大丈夫のようで, どういう条件で問題が発生するのか, わかりませんが...
ありがとうございます。結果が65535になると変になるようです。
OpenOffice.orgがMS Officeとの互換性についていろいろ言われるのは,こういった機能を実装しなかったせいでしょうか。
すいません,=2550*25.7も65535になるのに大丈夫だということでしたね。 他の方からメールで,どうやら .1 が付くとまずいらしいと教えていただきました。
群馬大の青木先生もだいぶ昔に指摘してましたので、 バクの再来(未修整の使い廻し)かも知れません...(^^) 過去の指摘 http://aoki2.si.gunma-u.ac.jp/Hanasi/excel/index.html
どもども。青木先生には私の古いページもリンクしていただいておりました。
こんにちは。試してみました。 850*77.1→100,000 25500*2.57→100,000 2.55*25700→100,000 かけ算の順序を変えても同じでした。 .1でなくとも100,000と表示しますね。
ところが、 =int(850*77.1)などとすると65535となります。 しかし、 =(850*77.1)だと100,000となります。
25700*2.55は100,000ですが、 257000*0.255は65,535となりました。 0.257*255000も65,535となりました。
最初は二進数の取扱かとおもったのですが、そうでもないようですね。 100,000という誤り表示のセルを複数選択すると、excelの下の欄に「平均値65535」と表示されました。内部では65535と計算しているのかも。
表示の問題であって計算の問題ではないということだそうです。 http://www.itmedia.co.jp/news/articles/0709/27/news018.html
EXCEL2002SP1では65535でした。いつからバグが入ったのでしょうね。
Microsoft Excel : Calculation Issue Update によれば,掛け算に限らず,結果が65535または65536またはそれらよりn×ulp(n=0,1,2,3,4,5)小さい全部で12個の数のときに表示がおかしくなるということですね。
自分でやってみて間違いに気づきました。 結果が65535または65536(を含まず,それら)よりn×ulp(n=1,2,3,4,5,6)だけ小さい全部で12個の数です。 ここでulp=7.276E-12です。 つまり,65535は大丈夫だけれど65535-ulpから65535-6ulpはみな10000と表示され,65536は大丈夫だけれど65536-ulpから65536-6ulpはみな10001と表示されます。
大昔Excelの演算誤差に書いたようにExcelは演算結果を「切りの良い」数に置き換えることによってPHPとExcelの丸め方で書いたようなお馬鹿な苦情に答えているようですが,それとの関連のバグのような気がします。ちゃんと調べる時間的余裕がないのですがどなたか調べてみてください。
確認しました
Excel 2007 で 100,000 になりますね (Excel 2003 SP2 では 65,535)。=2550*25.7 は大丈夫のようで, どういう条件で問題が発生するのか, わかりませんが...
Re: 確認しました
ありがとうございます。結果が65535になると変になるようです。
OpenOffice.orgの互換性
OpenOffice.orgがMS Officeとの互換性についていろいろ言われるのは,こういった機能を実装しなかったせいでしょうか。
=2550*25.7
すいません,=2550*25.7も65535になるのに大丈夫だということでしたね。
他の方からメールで,どうやら .1 が付くとまずいらしいと教えていただきました。
互換性は無い方が
群馬大の青木先生もだいぶ昔に指摘してましたので、
バクの再来(未修整の使い廻し)かも知れません...(^^)
過去の指摘
http://aoki2.si.gunma-u.ac.jp/Hanasi/excel/index.html
Re: 互換性は無い方が
どもども。青木先生には私の古いページもリンクしていただいておりました。
25500x2.57,2.55x25700も100,000になりました
こんにちは。試してみました。
850*77.1→100,000
25500*2.57→100,000
2.55*25700→100,000
かけ算の順序を変えても同じでした。
.1でなくとも100,000と表示しますね。
ところが、
=int(850*77.1)などとすると65535となります。
しかし、
=(850*77.1)だと100,000となります。
25700*2.55は100,000ですが、
257000*0.255は65,535となりました。
0.257*255000も65,535となりました。
最初は二進数の取扱かとおもったのですが、そうでもないようですね。
100,000という誤り表示のセルを複数選択すると、excelの下の欄に「平均値65535」と表示されました。内部では65535と計算しているのかも。
修正がそのうち配布されるとか
表示の問題であって計算の問題ではないということだそうです。
http://www.itmedia.co.jp/news/articles/0709/27/news018.html
ためしてみました
EXCEL2002SP1では65535でした。いつからバグが入ったのでしょうね。
Microsoftのブログによれば
Microsoft Excel : Calculation Issue Update によれば,掛け算に限らず,結果が65535または65536またはそれらよりn×ulp(n=0,1,2,3,4,5)小さい全部で12個の数のときに表示がおかしくなるということですね。
訂正:Microsoftのブログによれば
自分でやってみて間違いに気づきました。
結果が65535または65536(を含まず,それら)よりn×ulp(n=1,2,3,4,5,6)だけ小さい全部で12個の数です。
ここでulp=7.276E-12です。
つまり,65535は大丈夫だけれど65535-ulpから65535-6ulpはみな10000と表示され,65536は大丈夫だけれど65536-ulpから65536-6ulpはみな10001と表示されます。
Excelのバグ:補足
大昔Excelの演算誤差に書いたようにExcelは演算結果を「切りの良い」数に置き換えることによってPHPとExcelの丸め方で書いたようなお馬鹿な苦情に答えているようですが,それとの関連のバグのような気がします。ちゃんと調べる時間的余裕がないのですがどなたか調べてみてください。