/ 最近 .rdf 追記 編集 設定 本棚

脳log[20220904]



2022年09月04日 (日) 「C言語のint型を正しく理解しているか?」クイズ。GCC/LLVM x86/x64の挙動を仮定した問題だが、はっきりいって超難しい。新山は2問目からコケた。 https://t.co/Esjrcid1hs」■やったよ>結果(PNG)。○が16で✖が4。最後の✖は選択肢が1つしかないのに不正解にされて納得いかないけど。■復習コーナー。「What does the expression SCHAR_MAX == CHAR_MAX evaluate to?」 char の符号が処理系定義なのは知ってたけど、処理系定義と未定義を混同した。だいたい符号付きにされるから成り立つ(1)のを正解にするってさ。それとあとになって気がついたけど、この問いに答えるには SCHAR_MAX と CHAR_MAX の型の異同について考えるだけでは足りなくて、int 型へ昇格されて比較された結果がどうなるかを答えないといけなかった。だってビットパターンは2つとも同じなわけだから(追記:嘘だよ。符号付き最[小]値と負号無し最[大]値の話になってるよ)、型が異なることが比較結果が偽となることを即座に意味しない。左のように書いてから疑いを持って検索したら、C++ のリファレンスではあるけどこう書いてあった。「具体的な値は実装依存であるが、127(2^7 - 1)以上であることが規格で定められている。このマクロによって定義される値の型は int である。」 SCHAR_MAX の型は最初から int であると。そんな気がしたぜ。ちなみに UCHAR_MAX についても「具体的な値は実装依存であるが、255(2^8 - 1)以上であることが規格で定められている。このマクロによって定義される値の型は、 unsigned char の全ての値が int で表すことができれば int、そうでなければ unsigned int である」とあるので、基本的に int であると。UCHAR だけど char でもなければ unsigned でもないと。■「Assume x has type int . Is the expression x<<0 ...」 負の数の左シフトはシフト数によらず定義されないそうで。■「Assume x has type unsigned short . Is the expression x<<31 ...」 unsigned short の昇格先としてつい unsigned int を期待してしまったけど、int で十分だから int だった。C 言語の int 好きを十分頭に入れてクイズに臨んだのにほころびが。■「Does evaluating the expression INT_MIN % -1 invoke undefined behavior」 最後の問い。選択肢が「Who knows」(不正解)しかない。他の選択肢があっても普通に答えが返ってくると思ってたから不正解で間違いない。これの結果を保証すると効率に響くという不都合な式らしいけど、コンピュータの気持ちで余りを計算することができないので INT_MIN の何がまずいのかわからず。ひょっとして -INT_MIN が存在しないことが関係する?■■■近くにあったツイートでこちらが目に入った。「科学としてのソフトウェア工学研究の危険性。ほとんどの「定量的な結果」は非常に限定された条件下でのみ意味があるのに、ときにそれを金科玉条のようにして議論が進められる。この結果起こるのは、データに現れない心理的な部分の軽視である。 https://t.co/Shrb4HQn6G」■この手の指摘をつい最近オープンダイアローグの文脈で読んだ。この本『開かれた対話と未来』。オープンダイアローグの個別的な性質から成果を科学的に評価するのが難しいそう。難しいけどやってるみたい。■英語が不自由なので流し見だけどリンク先を読むと、新型コロナのときにも見られた「根拠はあるんですか」を戒める内容ぽい。つまり、有望そう妥当そうではあるけどまだ根拠がない論を「根拠は?」で潰して、安い根拠をそなえた愚策次善の策をありがたがるなよと、そういう雰囲気。私見ですけどね、データが必要なのは凡人と秀才だけで、馬鹿と天才にはデータの裏付けなんていらんのですよ。問題はデータがないと馬鹿と天才が見分けられないことで……。