解決済

演算式の中で符号付きの数値にはカッコが必要か?

とある、質問で
× 3a + -2×a + -2×1
○ 3a+(-2)×a+(-2)×1
のような指摘を頂きました。
間違いなら間違いで一つ賢くなるので、いいのですが、理由を知りたいです。
演算子に続く符号付き数値についてはカッコが必要なのでしょうか?
例えば、
-2 + x のような場合には、
カッコは必要ないと思いますので、
演算子に続く場合にカッコが必要だということだと思います。
(符号は数値を表す一部なので、演算の順序とは関係ない)
しかし、それって単に見やすいかどうかの問題で、数学的にそれが必要であるというなら
-2 + x {x|x≧0}
-2 + (x) {x|x<0}
なのかというとそうではない。
(つまりカッコは演算の順序を変更するのに必要であって、変更を要しない場合には書いても良いが書く必要もない)と思うのです。
数学で、いわゆる(数式の)文法が(間違いかそうでないか)問題になるというのは、ちょっと納得できません。
小学校あたりでそのような教育指導方針があって、その上(数学上というより方針上)で間違いなのでしょうか?
(小学校で習ったかどうかは遠い昔のことなので、既に記憶にありません)

2008-05-21 04:53の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。
Ads By Google

回答(3)

1.

2008-05-21 06:52:08ベスト
 この前の問題ですね。見ましたよ。

指摘があったのを覚えており、その指摘は問題がある(間違いと言うよりは)という意味であれば、「国内外に関係なく正しい」と思います。正の数値には+を書かないのに負の数値にはーを付けるため、その負の数値の前に演算子の+やーがあると負の数値のーがあることで前の演算子が表示上分かりにくくなるから(例えば、ーにーが続くとひょっとしたらーは一つかと読まれてしまうかもしれません)。数式を読みやすくするための便宜上の習慣だと思います(数式を書く上での文法とまでは言えないと思います)。

○ 3a+(-2)×a+(-2)×1

の例でも、-2がもし+2だったら+の記号は省略するので()はいらないです。何故なら演算子の+と正の数値の省略された+が続かないからです。つまりは、

○ 3a+2×a+2×1 または 3a+2a+2×1

また上記のー2の代りに変数(Y;Y<0)であっても演算の+と負の数値のーが重なるわけではないので()は不要です。つまりは、

○ 3a+Y×a+Y×1 など。

いずれにしろ、見やすくするための習慣だから(文法ではないから)、BLUEPIXYさんのように書いても一概に間違いだとまでは言えないように思います。
回答レベル : 回答

回答ありがとうございます。
+の場合も省略できるというだけで、
例えば、
3a+(+2)
のように書く場合があります。

6.

2008-05-21 10:16:15ベター
情報処理の世界では、

「演算子が連続してはならない」

鉄則があります。ただし累乗を示す演算子"**"は別格です。
理由?
理由はコンパイラを作成するときの、数式処理で障害になるからです。
ご存知のように、コンピュータには人間のような「目」がありません。その代わり素晴らしい記憶力を持っていて、数式を左から右へ一文字ずつ読み取りながら、途中経過を要領よく記憶してゆき、最後に一挙に計算してしまう方式になっています。
こうした左から右へ向かって行なう数式解析(数式評価)をする場合、SEやプログラマ側から見れば、演算子の連続は厄介な問題です。
この厄介な処理を回避するために、演算子が連続する場合は、括弧でくくってどちらの演算子を先に処理するのかを"明示的に"記述していただいているわけです。

なお

3a + -2×a + -2×1

という記述は、コンパイラ内では空白が読み捨てられ、

3a+-2×a+-2×1

と解釈されてエラーを検出してしまいます。
正しい記述は、

3*a+(-2)*a+(-2)*1
3*a + (-2)*a + (-2)*1

等です。空白は数式を読みやすくするために用いているだけで、式の評価順序に何らの影響も与えません。
プログラム記述言語は、我々の日常語に近い表現ができるだけであって、イコールではないのです。
プログラムを記述する場合は、その文法書をよく読んで規則に従い、疑念を抱かないことですね。

既に他の方から指摘がありますが、
例えば、
#include <stdio.h>

void main(void){
int n;

n = 1 + -1;
printf("%d\n", n);
}
は、問題なくコンパイルできるし、実行できます。
単項演算子は2項演算子より優先度が高いからです。
プログラム言語で演算子の優先度と評価順が規定されているなら問題なく記述できます。

7.

2008-05-21 20:54:45ベター
前スレ:
http://knowledge.livedoor.com/34150
で,質問者は中学生くらいなのでしょうから,演算子云々の話をしても無理がありますし,カッコがなければテストで減点されるでしょうから,カッコをつけることを覚えてもらえば・・・と思いコメントしました.遅かったかもしれませんが...

理由ですが,数学の記法として,ひとつの数に対して原則としてカッコ付きで表記します.
(+3)+(+1)
混乱がないようなら,省略して,
3+1
と表記します.
3+-1
は「+-」という演算子がある可能性があるのでNG.(実際,演算を定義すればこの記号を使っても問題ないです.)

「-」記号は不幸にも単項演算子と2項演算子が同じ記号で混乱しますが,単項演算子をカッコなしで許すと,
3+-----1
みたいな表記も可能になって,面倒です.

コンピュータの話だと,デクリメント「--」の記号もあったりして,上の例は解釈に困ります.

ちなみに,コンピュータ言語では,
3+-1
はエラーにならないことが多いと思いますが,
3--1
は,例えばPerlだとエラーになります.

まぁCでdefineするときのカッコだと思っておけばいいんじゃないでしょうか.

回答ありがとうございます。
>「+-」という演算子がある可能性があるのでNG
なるほど、コレは納得できますね。
ただ、リンク先の、問題の数式では、スペースが挟まれているので、「+-」の演算子であるとは言えません。

Ads By Google

コメント(27)

2008-05-21 10:38:55

ソフトウェアの数式処理においては、

 A ■ B

のフォームを数式の基本形と決めています。
ここに、「■」は何らかの演算子(operator)を示します。

 A ■■ B

は累乗計算でないかぎりエラーとなります。
単に"-2"や"+2"と記述した場合は、

 0 - 2
 0 + 2

と整形されて処理されます。

#2.  usa
2008-05-21 13:04:57

BLUEPIXYさんの書かれた 3a + -2×a + -2×1 は読みにくく好ましくない(問題のある)書き方ですが数学的には理解できる書き方であり、あながち間違いとは言えないと思います。

こういう書き方でも例えば数式処理システム(数式をコンピュータを用いて記号的に代数処理するソフトウェア、Reduce、Macsyma など)で正しく処理できるようにできます(Fortranなどのコンパイラーでは勿論文法違反ですが)。

2008-05-21 16:40:34

こんxxは、

そういえば前回の質問のやり取り時に、話題あがってましたよね。
私も気になったのでWeb検索してたのですが、数学(代数)としての回答は
結論からいうとusaさんも解説されているとおり

減算と負符号の概念の混乱を避けるため、負の数を含む式は、負の数を括弧でくくる。(よって、数式としては正しくない)

ということのようです。

負の数 減法

というキーワードでネット検索すると、負の数を括弧でくくった数式が数多くでてきますね。
ちなみに、日本の教育でいつ頃習うのかというと、中学校みたいです。誰がまとめたものかわかりませんが、以下のような資料がWeb上に落ちていました。

http://www16.ocn.ne.jp/~suuri/sample/j1-2.pdf

2008-05-21 16:43:11

あとは、必須か、必須でないか、間違い、正しい、丸(○)か、バツ(×)かの論議が残っていると思いますが、私が中学校の先生で、生徒の答案に記述してある数式を採点をする立場だったら丸(○)とはいいませんが三角(△)をつけると思いますし(考え方はあってる、という意図です。少なくとも、例の質問で質問した方の疑問が解決されてますしね)
立場が変わり、大学でのレポートを採点する立場等であれば、そのような数式は世の中に存在してない、などという理由で、遠慮なくバツ(×)つけると思います。また、丸(○)の例をあげるとすれば、また中学の先生の立場としての例になりますが、生徒に説明する上で、黒板に

 ”3a”、”-2”、”a”、”-2”、”1” が書かれた四角いマグネットに、「+、-、×、÷」を書き足して、数式ではなく、「生徒の理解を補足するための資料」

2008-05-21 16:44:03

ということであれば、どなたもバツ(×)だ!とはいえないのではないでしょうか。(前回の質問時、私はこれに近いものと考え閲覧してました。)

なお、情報処理上や、プログラム上の観点でバツ(×)という話がある、というのはテンゾー&テンロクさんがおっしゃられているとおりと思いますが、おそらくBLUEPIXYさんもこの概念はお持ちの方のはずですよ。

では、失礼します。

2008-05-21 20:44:30

そーいうおはなしだったのですか!
どうもヘンだと思った。

あたしは、まだコンキチのようです。

2008-05-21 20:59:29

>>#4
大学入試での記述問題だと,記法ミスで1点減点という基準が多いと思いますが,大学では×にした方がいいでしょうか?w

#8.  usa
2008-05-21 21:09:28

先日の質問でのBLUEPIXYさんの式の変形の過程は、正に数式処理システムでの式の変形の過程と同じだと思いました。数学上の規則に間違いがないからそんなことが出来るわけです。人に見させる式の表記法としては、どなたかから指摘があったように問題があったと思います。

2008-05-21 21:09:55

あ、、、一つ訂正させてください。

>私が中学校の先生で

私が家庭教師の立場で、中学生の生徒に数学を教える際、に変更させてください。

私自身は中学の先生ではないですから。本物の先生に現場は違うなんてことになったら、申し訳ないですからね。

2008-05-21 21:19:16

>>#7

-1点でいいと思いますよ。おそらく答えはあっているんでしょうから。今回、私がバツ(×)といった背景は、単に、大学に在籍していた時の話ですが、当時の先生の考えが、結構シビアで、途中過程を重視していた先生だったんですよね。

答えがあってても、途中の計算で怪しい箇所があれば、遠慮なくその問題はバツ(×)つけられました。。。まぁ、ある意味カンニング対策ってこともあったんでしょうけどね。

#11.  usa
2008-05-21 21:21:11

>>#7 大学でもこういう記法は望ましくないですが、数学の考え方を正しく分かっているかどうかが最重要という立場から「正解」とされる(べき)と思います。この程度の望ましくない記法などは数学の大先生でもよくやっていますよ(頭は違った方に行っているのだから)。それを「先生、間違っていますよ」などと言ったら、「何が? どこも変じゃないよ」と言われます。

2008-05-21 22:54:42

>>#11

そうですね、大学の教授といっても様々な採点基準の方がいらっしゃいますもんね。御二方とも、私がバツ(×)の例として、大学のレポートをだしたことに違和感を感じられてるようですが、あまりその1点にこだわらないでくださいね。

主旨は○、×、△の例を一つずつあげようとしてて、私が自分の経験上から思いついたのが、とある教授のお手伝いとして、学生のレポートを採点する作業だった、ということでした。

公的に近い文書(今回でいえば、教科書でしょうか)を添削する立場の人、と添削される立場の人、みたいな例を探してたんですが、ぴったりとした例がみつからなかったんですよね(^_^;)

大学の研究論文にまつわる話であれば、一字一句シビアな要求を求めれる場合がありますので、この関係に近いかな、と思ってバツ(×)の例を大学のレポート、にしてました。

では、失礼します。

2008-05-21 23:26:20

>>#10,#14
違和感があるわけではないですよ.中学でカッコをつけるように習うはずなので,大学生にもなって身についてないなら×をつけるという姿勢は別に間違っているとは思いません.むしろ,将来的に論文誌に投稿するような学生にとっては,その方がためになると思います.

>>#11
大先生がやるからやっていいということにはならないですが,現実問題としては,-1点くらいにしないと,後からゲタを合わせるのが面倒という話もあったりしますw

#16.  usa
2008-05-22 00:46:20

>>#15 好ましくない記法を中学段階から直させるのは賛成ですが、論文査読などで重要なのは論文の中身(独創的な中身で学会に貢献できるかどうか)です。中身がないどころか、盗作さえあります。記法などの形式は事務局の女性でも直せます(学会によって形式上の規則も違うので必ずやります)。以上、念のため。

大先生がやるからやっていいということではなく、中身が一番重要なので形式はそう重要でないと言うこと。あまり形式にこだわっていると学問は進歩しないという意味です。

2008-05-22 00:59:43

>>#16
大きい企業なら直してくれる事務の人もいるでしょうが,学生にはそういう存在は指導教官しかいないです.うっかり投稿してしまって,何ヶ月も待たされた挙句,些細な書き方の間違いを突かれてリジェクトされるケースも少なくないです.そういうのを防ぐために,普段から注意すべきという姿勢は正しいはずですよね?

学会側の事務の人にアクセプト後にスタイルの修正を求められることはあるかもしれませんが,中身の記述について修正を求められることはないと思いますよ.

中身が一番重要なのはもちろん言うまでもないですが,議論の対象は書き方の話です.

#18.  usa
2008-05-22 01:26:59

>>#17
>何ヶ月も待たされた挙句,些細な書き方の間違いを突かれてリジェクトされるケースも少なくないです.
どこの学会か知りませんがひどいものですね。自分の関係した学会では形式よりも中身に重点をおいて査読するように心掛けていました(しかし形式があまりひどく読むに耐えないものはすぐにも返却すべき。査読者の査読常識によって難しいですが・・)。この話はこれぐらいに。

#19.  BLUEPIXY
2008-05-22 02:30:30

皆さん回答ありがとうございます。
思いもかけず、沢山のコメントが寄せられ驚き、喜んでおります。

回答的(コメント含むなので'的')に、プログラム言語的なもの、教育的なもの、数学的なものがありますが、
プログラム言語なもの(だめな場合もあるということも)、教育的なもの(教科書など標準的な書物にはマイナスの数値にこのような場合カッコを付ける)ということも一応存じております。
まず、数式的にそのような変換が正しいのかどうかと、教育的間違いとするなら、それが、どのへんでどのように教えられているのか知りたく質問しました。

#20.  BLUEPIXY
2008-05-22 02:49:44

数学のルールとしては、はっきりそうと示しているのは、ひよこ画伯やすさん、だけですが、回答(で)されていないのでベストにできません。

教育上の問題としては、
よくこうした些末なこと(問題を理解しているかではなく単なる記述の問題)で、回答がバツになるということを聴き、憤慨しているところであり、「間違い」だ、と言われるのには抵抗があります。
よろしくない書き方だと(減点)されるというのは、かまわないですけど。
ただ、このような公共の場所でそのような記述を披露するのは、問題があったといえますね。
ズボラな私としては、なるたけ文字入力を省略したいというところがあって、
展開に関して筋道が追えるのであれば、別にかまわんだろうという気持ちがありました。

#21.  BLUEPIXY
2008-05-22 03:00:20

ちなみに、
Perl でも
3- -1
は、エラーにはならずに、4になります。
空白は、単に捨てられるだけではなく、
トークンの区切りとしての情報は、処理されることが多いと思います。

C言語においては、
-- と -(単項演算子)は、演算優先度が「同じ」であり、その場合右から左に評価されますが
--- のような場合は、解釈が混乱(?:処理系による?)します。
もちろんそのような場合は、解釈を助けるように記述する"べき"です。
さすがに、単項演算子二つ(以上重ねて記述)の意味で--を記述しようとするのは、プログラマとしては、(ムダだから)異常です。

#22.  usa
2008-05-22 03:17:04

おやおやベストいただきありがとうございます。自分も同じような表記上の間違いをよくします。lim の書き方ですが、その下に 0→x と書くのか x→0 と書くのか分からなくなり、「分かればいいや」と書いたら違っていたらしく誰かに注意されました(今も、どちらが正しいのか忘れてしまっています)。ベストどうもありがとう。

2008-05-22 04:23:23

>>#21
ルールをはっきり示したつもりですが,わかりにくかったでしょうか・・・.空白を読めとのご指摘ですが,手書きすることを考えると解釈は厳しいです.空白が狭いから×とか言われても面倒ですし.

数学でも「-」を重ねるのは,プログラム同様,異常ですよね...

>>#22
「x→0」ですw「x to 0」左から右に「xが0に・・・」と読むので自然だと思いますが・・・.矢印を逆にすると,アルゴリズム表記のときに使う代入に見えますw

#24.  BLUEPIXY
2008-05-22 05:54:32

>>#23
s/#21/#20/
「はっきりそうと示しているのは」
は、
ルールと「よって、数式としては正しくない」
と明言されている部分を言っております。
わかりにくくてすみません。

#23>空白を読めとのご指摘
そのような指摘はしておりません。
演算子として
"+-", "-","+" があるなら、
+ - は、"+-" ではないと申しているだけです。
おかしいですか?
演算子"+-"があるとしてその間にスペースを入れることはできないと思います。
例えば、C言語で
--n;
の意味で
- -n;
と書くことはできません。

#25.  BLUEPIXY
2008-05-22 06:17:46

もし、2文字以上の演算子を前提とするなら、
その間のスペースのあるなしの違いは、必須であって、
違いによって意味が異なってしまうので、
その場合は「間違い」であると言える。
読みやすい読みにくい云々ではなく、数式として間違いとなるので、
その区別は明確でなければいけない。

もし、そのようなことが問題となるなら、
同じ意味をもつ1文字の演算子を発明するべきだと思う。

2008-05-22 14:56:23

>>#24,#25
いあ,活字ならそれでいいですが,手書きにすればスペースが入っているかどうか判別するのは難しいですし,そういう事態は避けた方がいいですよね,ということです.コンピュータの話ではなくて.まぁ数学記号の使い方は想像されているほど「明確」ではないかもしれませんが・・・.

新しい演算子の記号を定義するのはいいと思いますけど,初学者には読みにくくなるのですよね.プログラム言語でいうとAPLみたいなw定義しなさすぎると逆にBrainf*ckみたいになったり.そういえば(言語の)Whitespaceはおもしろいですが,手書きできないですねー.

#27.  BLUEPIXY
2008-05-22 15:35:26

#26>手書きできないですねー.
最近では、プログラムを手書きする機会は、あまりないか(例えば資格試験の筆記とか)と思いますけど、
プログラムとして筆記する場合には、
△や&#x2423;(直接書けないので、HTMLの文字参照形式で。[ が上向きに開いたようなもの)を使うのが普通だと思います。
やはり、スペースのあるなしが記述上問題になるので。

#28.  BLUEPIXY
2008-05-22 15:48:10

#26>数学記号の使い方は想像されているほど「明確」
いあいあ、数学に詳しいわけでもないので、数学記号の使い方が「明確」に使われているかどうかを言っているわけではないのです。
スペースのあるなしで、意味が変わるなら、読み手に明確に(その違いがわかるように)書かなくちゃいけない、と言っておるのです。
要するに、「カッコを付けなくちゃいけない」と同じレベルの話です。
この場合、数式の意味が変わるので、余計に「いけない」。

#30.  BLUEPIXY
2008-05-22 16:00:29

#28>同じレベルの話です。
「明確」とは
つまり、筆記する場合においても、
もし書くとか書かないとか言う場合、
スペースがあるんだかないんだかわからないような書き方ではなくて、(減点されるかもよ)
スペースがある(ならある、ないならない)と「明確に」わかるように書くべきだという意味の「明確」です。
そんなに難しい意味(例えば数学の証明のような明確さ)を言ってるのでないっす。

トラックバック

トラックバックURL: