小清水さんとコンピューター数学

コンピューター・数学 に関することを書きます (特に丸め誤差の話が多いです。)

Excelでべき乗の計算をさせると不思議だなーという話 ~ 2^3^2

@curekoshimizu です。

仕事でExcelを使っていて不思議な気持ちになったので、とても久々に記事を更新しました。

お題となる計算

 {2}^{{3}^{2}}

正しい計算方法

当然ながら

 {2}^{{3}^{2}} = {2}^{9} = 512

このように、指数部分から計算します。

間違って  {2}^{3} から計算して、  {8}^{2} = 64 としてはいけないというお話になります。

そういう計算をしたいときには

 ({2}^{3})^{2}

と記す必要があります。

プログラミングでべき乗はどう表すか?

べき乗をプログラミングの演算子としてサポートしているものはいくつかあります。

例えば ExcelGoogle SpreadSheet・bc などは x ^ y と書くことで、  {x}^{y} の計算ができます。

また、JavaScriptPythonRubyPHPFortran などは x**y と書くことで、  {x}^{y} を計算できます。

自分が調べていて知らなかったことは、 bcやFortranなどの(古き良き)言語たちもこれらの記法をサポートしていたことでした。

計算をさせてみよう

Excel

64という結果を返してしまいます…。

Google SpreadSheet

bc

% bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
2^3^2
512

JavaScript

python

% python
Python 3.12.3 (main, Apr 10 2024, 05:33:47) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 2**3**2
512

ruby

% irb
irb(main):001:0> 2**3**2
=> 512

php

% php -a
Interactive shell

php > echo 2**3**2;
512

Fortran

program main
    print *, 2**3**2
end program main
512

WolfmanAlpha

WolfmanAlphaくらいになるとどちらの記法もサポートしている!

つまり?

Excelは 左結合で べき乗の演算子を評価し、その他は右結合でべき乗の演算子を評価しているということです。

Excelでべき乗の計算をするときは、他の言語と結合順序が異なるので、気をつけましょう!

その他Excelに関する話はこちら

これらをみてExcelに関する記事に興味がありましたらこちらもどうぞ。

これは Excel でカッコをつけたり+0をつけたりすると計算結果が変わるという話。 math-koshimizu.hatenablog.jp

これは 難しい計算をさせるとExcelでは精度がでないので計算が破綻しますという話。 math-koshimizu.hatenablog.jp