タグ

2017年4月10日のブックマーク (4件)

  • 未定義の動作

    未定義の動作にはどのようなものがあるのでしょうか。C言語の標準規格であるJIS X 3010:2003(ISO/IEC 9899:1999)の「附属書J 可搬性」を参考に未定義の動作を列挙してみましょう。 規格の制約以外の箇所で現れる「…(し)なければならない」または「…(し)てはならない」という要求をプログラムが守っていない場合。(前提事項4) 空でないソースファイルが、改行文字で終了していない場合。改行文字で終了している場合で、その直前に逆斜線文字がある場合。ソースファイルが、前処理字句の途中または注釈の途中で終了している場合。(5.1.1.2) ##演算子による字句連結の結果として生成される文字の並びが国際文字名の構文規則に一致する場合。(5.1.1.2) ホスト環境のプログラムがmainという名前の関数を5.1.2.2.1で定められる4種類の方法のいずれかで定義しない場合。(5.1

    y_r
    y_r 2017/04/10
    C99 未定義動作一覧。
  • There is no complete list of all notifications balloon tips in Windows – The Old New Thing

    Get notified in your email when a new post is published to this blog

    There is no complete list of all notifications balloon tips in Windows – The Old New Thing
    y_r
    y_r 2017/04/10
    "not even with regard to operations preceding the first undefined operation" というのが強烈
  • 浮動小数点数 Tips

    浮動小数点数の表現に関する、特徴的な部分や罠にはまりそうな部分の非包括的すぎるメモ。浮動小数点数がおおざっぱに x * (2 ** y) みたいに表現されていることは知っているけど、詳細はよく知らんという向け。 正規化数と非正規化数 浮動小数点数の符号化方式として標準的な IEEE754 では、 ± (1.xxxx) * 2 ** (yyyy - bias) // xxxx, yyyy は二進数 の形で符号、仮数部 xxxx 、指数部 yyyy を符号化する。仮数部の 1 は符号化しないのがポイント。 1-bit 節約できる以上に、仮数部が自然に [1, 2) の範囲に制限され、任意のビット列 xxxx yyyy と浮動小数点数が (だいたい) 1:1 対応するのが気持ちいい。この形で表される数を正規化数と呼ぶ。 ただ、このままでは表現できる値の絶対値に下限ができてしまう。0 も表現できな

    y_r
    y_r 2017/04/10
    浮動小数点の非正規化数 (0.xxxxx + * 2 ^ (min_exp + 1)) のはなし
  • C言語分かってなかった (I Do Not Know C) - Qiita

    Dmitri Gribenko氏によるBlog記事 "I Do Not Know C" より訳出。原文および訳文のライセンスは CC BY-SA 3.0 に従う。 この記事の目的は、皆に(とくにCプログラマに)「C言語分かってなかった」と言わせることです。 C言語の死角は思っているよりも身近にあり、よくある単純なコードですら 未定義動作(undefined behavior) を含む可能性があると示したいと思います。 記事は質問に対する回答の形をとります。全ての例示コードは別々のファイルに分かれていると考えてください。 (訳注:Qiita/Markdown表現の制約から、読中ネタバレ防止のため文章順序を変更しています。前半には質問のみを、後半には質問と回答の対を訳出しました。) 質問編 1.

    C言語分かってなかった (I Do Not Know C) - Qiita