webdevqa.jp.net

Excelでx = 3の= -x ^ 2 + xが-6ではなく12になるのはなぜですか?

Excelスプレッドシートの私のセルA1に数字3が入っているとします。式を入力すれば

= - A1^2 + A1

a2では、A2は12を表し、-6(または-9 + 3)を表示します。

何故ですか?この誤解を招くような行動を防ぐにはどうすればよいですか?

96
Rodolfo Oviedo

簡単な回答

この問題を解決するには、等号の前に0を追加するだけです

= 0 - A1^2 + A1

または、いくつかの括弧を追加して、操作の標準順序を強制します

= - (A1^2) + A1

または、-1による乗算の一般的な解釈でマイナス記号を置き換えます

= -1 * A1^2 + A1

この特別なケースでは、余分な用語+ A1があるため、最良の解決策は@ lioness99aによって提案されたものです。

= A1 - A1^2

詳細な説明

Excelの規約では、

= - 3^2

(-3)^ 2 = 9に等しい一方、

= 0-3^2

0-9 = -9に等しい。

0だけを追加すると結果が変わるのはなぜですか?

前に被減数がない場合、-3 ^ 2のマイナス記号は否定演算子と見なされます。これは単項演算子(引数が1つのみ)で、数値(または式)の符号を変更します。続きます。ただし、0-3 ^ 2のマイナス記号は減算演算子です。これは、-に先行するものから-に続くものを減算する2項演算子です。 Excelの規則に従って、指数演算子^が計算されます否定演算子の後および減算演算子の前"Excelでの計算演算子と優先順位" 、セクション「Excelが数式で演算を実行する順序」を参照してください。

標準的な数学的慣例では、exponentiationが計算されます否定と減算の両方の前、またはより簡単に言えば、^-の前に計算されます。残念なことに、Excelは代数ルール、学校の教科書、アカデミックライティング、科学計算機、Lotus 1-2-3、Mathematica、Maple、FortranやMatlabなどの計算指向言語とは異なる規則を選択しましたMS動作します... VBA(Excelのマクロの記述に使用される言語)。残念ながら、LibreOfficeとGoogle SheetsのCalcは、Excelとの互換性のために同じ規則に従っています。ただし、Googleの検索ボックスまたはバーに式を配置すると、優れた結果が得られます。 Enterキーを押すと、括弧を使用して計算の順序が指定されます。数学者が累乗よりも否定の優先順位を擁護する「コンピューター科学者」の議論を殺す議論: http://mathforum.org/library/drmath/view/69058.html

一般的な回避策

計算したい場合

- Anything ^ 2,

等号の前に0を追加します

0 - Anything ^ 2

または、いくつかの括弧を追加して、操作の標準順序を強制します

- ( Anything ^ 2 )

または、-1による乗算の一般的な解釈でマイナス記号を置き換えます

-1 * Anything ^ 2

上記の選択肢の中で、最も実用的であるため、マイナス記号の前に0を追加することを好みます。式が既に括弧で囲まれている場合は、括弧を追加しないでください。括弧を多用すると、式の読み取り、デバッグ、書き込みが難しくなります。

余分な項が追加される(または、偶数の電力の問題なしで減算される)場合、

- Anything ^ 2 + ExtraTerm,

最善の解決策は、ExtraTermを最初に配置することです。

ExtraTerm - Anything ^ 2.

別の回答へのコメントは、非標準の優先順位規則に注意する必要がある唯一のケースは、マイナス記号が等号(=-)の後に続く場合だということです。ただし、= exp(-x ^ 2)や=(-2 ^ 2 = 2 ^ 2)など、マイナス記号の前に被減数がない例もあります。

最初に書いた短い答えを提案してくれた@BruceWayneに感謝します。

興味があるかもしれません Excelによれば、4 ^ 3 ^ 2 =(4 ^ 3)^ 2。これは本当に標準的な数学の慣習ですか?

136
Rodolfo Oviedo

Rodolfo's Answerよりも少し簡潔ですが、次のものを使用できます。

=-(A1^2)+(A1)

(編集:私はそれが自己質問/答えであることを全く知りませんでした。)

20
BruceWayne

先頭の-は最初の用語の一部と見なされます。

=-3^2(-3)^2 = 9として処理されます

開始時にゼロを指定すると、代わりに通常の減算として扱われます。

=0-3^20 - 3^2 = -9として処理されます

あなたが2人の演算子を持っているならば、そして、同じことが起こります。

=0--3^20 - (-3)^2 = -9として処理され、=0+-3^20 + (-3)^2 = 9として処理されます

14
trapper

Excelは方程式を次のように解釈しているからです。

(-x)^ 2 + x

欲しいとき:

- (x ^ 2)+ x

否定は減算と同じではなく、したがってPEMDASでカバーされていないため、この種の望ましくない動作を防ぐために、ベストプラクティスは括弧を多用して独自の優先順位システムを定義することです。例は次のようになります。

( - (x ^ 2))+ x

それはやり過ぎかもしれませんが、これは私がExcelが私が望む方法で振る舞うことを保証する方法です。

4
routhken

= - A1^2 + A1はExcelに固有のものであるため、Excelの規則に従う必要があります。ここでの他の答えとは反対に、正しい優先順位はありません。異なるアプリケーションによって採用されている規則が異なるだけです。参考までに、Excelで使用されている優先順位は次のとおりです。

:       Range
<space> intersection
,       union
-       Negation
%       Percentage
^       Exponential
* and / Multiplication and Division
+ and - Addition and Subtraction
&       Concatenation
= < > <= >= <>  Comparison

かっこを使用して上書きできます。

3
Paul Smith

どちらでも構いません。

=-A1^2+A1

12を返しますが、

=0-A1^2+A1

- 6を返します

あなたが12を返すことが常識に反すると感じるならば。 Google Sheetsも同じことをすることに注意してください。

3
Gary's Student

他の人々は「どうすればこれを避けることができますか?」と答えました。質問の一部です。それがなぜ起こるか私はあなたに言うつもりです。

これは、1979年のパーソナルコンピュータのメモリと処理能力が非常に限られていたために起こります。

VisiCalc は、 IBM PCの初期リリースの2年前の1979年にApple II用に導入されました (最近のほとんどのデスクトップおよびラップトップコンピュータは直接の先祖を追跡します)。 Apple IIは最大64 KiB(65,536バイト)のRAMを搭載することができ、VisiCalcは少なくとも32 KiBが必要です。ここでちょっとした余談ですが、VisiCalcは、かなり広くApple II、そしておそらくパーソナルコンピュータ全般の「キラーアプリケーション」であると広く考えられています。

特別な場合が少なく、式の先読みが少なくて済むため、スプレッドシートの式を解析するためのコードを簡単に(そして結果として小さく)することができます。したがって、より大きなスプレッドシートを処理できるようにすることと引き換えに、コーナーケースではユーザーに多少明示的であることを要求することは理にかなっています。ハイエンドのApple IIを使っても、アプリケーションに必要なメモリが占​​められた後で遊ぶには数十キロバイトしかありませんでした。メモリの少ないシステム(48 KiB RAMは "深刻な"マシンにとって珍しい設定ではありませんでした)では、限界はさらに低くなりました。

IBMがPCを発表したとき、新しいアーキテクチャへのVisiCalcの移植が行われました。ウィキペディアではこのポートを "bug compatible" としています。そのため、たとえシステムが技術的に同じであっても、まったく同じ式の解析動作を見ることになるでしょう。より複雑な構文解析が可能でした。

1982年以降、MicrosoftはVisiCalcと競合し、その後1-2-3で、 Multiplan クロスプラットフォームスプレッドシートを使用しました。後に、 Lotus 1-2-3 は、特にIBM PC用に1983年に導入され、すぐにVisiCalcを追い越しました。移行を容易にするために、VisiCalcが行ったのと同じ方法で両方の式を解析することは意味がありました。そのため、制限された先読み動作は繰り越されます。

1985年に、Microsoft がExcel を導入しました。もともとはMacintosh用で、1987年に バージョン2から始まりました PCに。繰り返しになりますが、移行を容易にするために、これまでにほぼ10年間で人々が既に慣れ親しんできた公式の構文解析動作を進めることは意味があります。

Excelをアップグレードするたびに、動作を変更する機会がありましたが、ユーザーが式を入力する新しい方法を習得する必要があるだけでなく、以前のバージョンで使用または作成されたスプレッドシートとの互換性が損なわれる可能性もあります。各分野で互いに競合している複数の商業会社が存在する、まだ非常に競争の激しい市場では、ユーザーの慣れ親しんだ行動を維持することが決定された可能性があります。

2019年に早送りしても、元々1978年から1979年までの間に行われた式の構文解析による動作決定には固執しています。

2
a CVn

あるいは、あなたはただすることができます

= A1 - A1^2

-y + x = x-y

2
lioness99a

- A1^2には、単項否定演算子-と二項指数演算子^の2つの演算子が含まれています。括弧がない場合は、2つの解釈があります。どちらか

-(A1^2)

または

(-A1)^2

最初のものは、最初にオペランドA12でべき乗をし、それから否定をすると言います。

2番目のものは、最初にオペランドA1で否定を行い、次にそれと2の結果に指数を使用すると言います。

質問へのコメントで述べたように、あらゆる正当な環境において、パワーズはマイナス記号よりも高い優先順位を持っています。最初の1つ。

しかし、Excelは2番目のものを好みます。

あなたの環境が健全であるかどうかわからない場合は、安全のために括弧を入れてください。 -(A1^2)と書いてください。

0