hirax.net::Keywords::「プログラミング言語」のブログ



2012-01-30[n年前へ]

C++の「i++ と ++i の違い」とExcelの「i++ と ++i の違い」 

 ビール瓶を開けながら「プログラミング言語」の話題をしました。プログラミング…と言っても、思い切り(プログラミング言語的には)低レベルな話ばかりです。ここで言う「低レベル」というのは、ハードウェアに近いとかそういう意味の「低レベル」ではありません。

 たとえば、「C++で書くけど、ほぼFORTRANなんだよね〜」という「一体どんなC++だぁ?」というツッコミをしたくなるコード論であったり、「それって、必ず7文字のインデントを入れてからC++のコードを書くってことですか?」というこれまた低次元な「インデント論」だったりしたのです。

 そんな中、「(C++なら)とりあえず、a++とは書かずに、++aと書きますよね」という話になりました(参考:C++のi++ と ++i の違い)。そして、さらに、「(C++ではなくて)C言語のi++ と ++i の違い」みたいなことをMicrosoft Excelでも気にすることがあるか?という話題になりました。話題が脈絡無くサブルーチンに"GOTO"するのは、それは単にアルコール100%の酔っぱらいだから、です。

 「C言語のi++ と ++i の違い」みたいなことがMicrosoft Excelでもあるか?気にするか?というと、その答えはもちろん「YES」です。…なぜかといえば、たとえば、A1,B1,C1という3つのセルがあった時、それらの各セルに対して、
A1=B1
B1=B1+1
C1=B1
という式を設定する場合など、(自分自身のセルを参照する)循環参照になっているために、その際の計算順序は単純にZの法則にしたがって左→右・上→下の順番で行われるために、計算結果は
 A1,B1,C1=1,2,2
となるからです。A1とC1は、同じ式がセルに入力されていても、実は違う値(タイミング)のB1を参照するがために、違う値になるのです。…それは少しばかり「(C言語の)++iとi++の違い」に似ています。

 C++という言語名は「C++って、(++Cじゃないから)使う時は(前の値と同じというわけで)Cに過ぎないよね?」といった冗談をよく聞いたような気がします。それぞれの言語が抱える「(ちょっと意外にも感じる)++iとi++の違い」にはどんなものがあるのでしょうか?そしてまた、Microsoft Excel で++aとa++の違いを気にする人は、一体どのくらいいるものでしょうか?


参考:AWKの場合

2012-02-21[n年前へ]

チョー簡単で超上級ハッカーも満足する言語 Juliaをビルド&実行してみた 

 「チョー簡単で超上級ハッカーも満足する言語」を "git clone git://github.com/JuliaLang/julia.git" "sudo make" でビルドして.julia で実行し…いくつか計算をさせてみた。

9:36 PM - 23 Feb 12

2017-12-05[n年前へ]

Microsoft Excelで "=-1^2" が "-1"ではなくて"1"になる「理由」 

 Microsoft Excelで "=-1^2" が "-1"ではなくて"1"になるのが「なぜだろう?」というtweetを興味深く読み、そこから辿り着いた20年前のメーリングリスト記事が面白かったので、簡単なメモ書きをしてみます。メモ書きなので、面白い記事へのポインタと(その記事に対する)わずかな感想を書いただけの日記記事です。

 まず、この計算順にまつわる問題を考える時には、" Warning: Excel Performs Negation Before Exponentiation"のタイトルにもなっているように、Excelという一種のプログラミング環境上での、"negation"と"subtraction"という異なる2演算子の計算順序の違いを区別する必要があります。つまり、

=-A1^2
は"=(-A1)^2"と計算されるけれど、
=1-A1^2
は"=1-(A1^2)"と計算されるというように、前者の"negation"と後者の"subtraction"が異なる演算子として区別され・違う演算順序が適用されるという話です。

 次に、20世紀最後の年、つまり西暦2000年1月13日の20:18:46にDoctor Petersonがメールで書いている文面がとても参考になります。それは、"negation"のような単項演算子は”exponent”のような二項演算子に優先して演算されるものだったから、それをただ踏襲すると、こんな計算順序になるよね、というものです。「Lotus 1-2-3との互換性を重視した」わけではないけれど、プログラミング言語の過去経緯を踏まえて考える話だよね、というものです。

 そして何よりも、西暦2005年の12月16日にErikが書いているように、Windowsのメモ帳で "msgbox -2^2"と書いてから、そのファイルをtest.vbsという名前で保存して、もしもダブルクリックしたならば、(マイナス4ではなくて)"4"という答えが書かれたメッセージボックスを私たちは目にするよね。この例でもわかるように、エクセルの「ダメな話」として眺めるのではなくて、コンピューター科学の「興味深い話」として眺めるべき話じゃないか?というコメントが、とても参考になると思います。

So I think this isn't bad math on Excel's part, but good computer science.



■Powered by yagm.net