C++
atof をどうしても高速化したくて、桁数を限定すれば高速化できるのではないかと思い、整数部9桁、小数部9桁に限定したものを作ってみました。9桁というのは int や unsigned int で完全に表現できる最大の桁数です。なるべく整数で演算を行って速度を稼いで…
10 の整数乗を求める関数で、[-32, 31] 内の int n に対して高速なものを作りました。if ((np32 & ~63) == 0) のところですが、普通は if (0 コンパイルされるのに対し、前者は test (ビットand)と条件ジャンプの組1つで済みます。ちょっとでも速くしたかっ…
isdigit が inline 展開されないので、ASCII の数字のみ判定する関数を作りました。 // <isdigit.h> #ifndef isdigit_h #define isdigit_h #include <stdint.h> //------------------------------------------------------------ // // 高速数字判定 // /// 高速数字判定のテーブ</stdint.h></isdigit.h>…
VC++ で書いたコードをチューニングしていて、単純なコードなのに遅いってことありますよね。 で、アセンブラ コードを見てみたくなったときに使用するのがこのコンパイル オプションです。/FA、/Fa (リスティング ファイル) | Microsoft Learnマシンコード…
boost 1.72 の spirit x3 の double_ パーサを使用していたところ、どうも値がちょっとおかしい。 円周率の小数点以下16桁までの文字列 "3.1415926535897932" で試してみました。 VC14.16.27023 (Visual Studio 2017 15.9.22) 使用。 #include <boost/spirit/home/x3.hpp> #include <iomanip> #i</iomanip></boost/spirit/home/x3.hpp>…
BCC では大丈夫だったので、不完全な struct の宣言にも class を使う習慣になってしまっていたのですが、VC ではリンク時にエラーになります。一つ目のモジュール struct Foo { }; Foo* CreateFoo() { return new Foo; } void PrintFoo(const Foo&) { } 二…