タグ

2016年9月14日のブックマーク (4件)

  • 気がつくと複雑になってしまうコード: ある nakagami の日記

    いま、僕は複雑なコードに苦しめられている。主なところは - 安直に例外投げすぎ問題 - リストの内包表記使いすぎ問題 - define 使いすぎ問題 例外は要するに大域ジャンプなので後で例外が起きた(起こした)ところの値を受け取りたくて苦労している。 python は例外を投げてもメモリリークしないけど、いっそのこと golang ならこんな苦労をしなくても済んだのかもと思う。 リストの内包表記使いすぎ問題は def func_ab(values_list): def _set_ab(v): v.a = 'A' v.b = global_func_b(v.b) [_set_ab(v) for v in values_list] ↑こんなのがあって def func_ab(values_list): for v in values_list: v.a = 'A' v.b = global_f

    気がつくと複雑になってしまうコード: ある nakagami の日記
    mattn
    mattn 2016/09/14
  • C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) C言語の規格のリビジョン間には微妙な違いがありますが、このことを利用して「C90、C99、C11のどれとしてコンパイルされたかどうかにより、違う挙動をする」というプログラムを作ることが可能です。同様に、C++はほぼC言語の上位互換ですが、C言語とC++で違った結果を生み出すプログラムも存在します。 これは2015年の International Obfuscated C Code Contest (難読Cコード・国際コンテスト)への Don Yangの投稿 において、 C89、C99、C11、C++98、C11のどれとしてコンパイルされるかによって異なる出力を生成するプログラムを作成するのに使われています。C90の場合は、以下のような星形を出力します。 **************************

    C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD
    mattn
    mattn 2016/09/14
  • 高速な倍精度指数関数expの実装

    4. 最終実装コード 今回の目標はこのコードの意味を理解すること 2011/8/6 /204 union di { uint64_t i; double d; }; double expd(double x) { di di; di.d = x * 2954.639443740597 + 6755399441055744ULL; uint64_t iax = tbl[di.i & 2047]; double t = (di.d - 6755399441055744ULL) * 0.0003384507717577858 - x; uint64_t u = ((di.i + 2095104) >> 11) << 52; double y = (3.0000000027955394 - t) * (t * t) * 0.16666666685227835 - t + 1; di.i = u

    高速な倍精度指数関数expの実装
    mattn
    mattn 2016/09/14
    icc 強い
  • Vimmerからの贈り物

    mattn
    mattn 2016/09/14