あなたの log 関数は何ですか?

プログラミング言語などで log が常用対数(底は10)なのか自然対数(底はe)なのかという問題です。 TL;NR 導入 本題 TL;NR ほとんどのプログラミング言語では log は自然対数、SQL はバラバラなので注意、Excel ワークシートでは常用対数 導入 は の逆関数で、…

atof の桁数限定高速版

atof をどうしても高速化したくて、桁数を限定すれば高速化できるのではないかと思い、整数部9桁、小数部9桁に限定したものを作ってみました。9桁というのは int や unsigned int で完全に表現できる最大の桁数です。なるべく整数で演算を行って速度を稼いで…

10 の整数乗

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, CMAKE でアセンブラ リスティング ファイル出力

VC++ で書いたコードをチューニングしていて、単純なコードなのに遅いってことありますよね。 で、アセンブラ コードを見てみたくなったときに使用するのがこのコンパイル オプションです。/FA、/Fa (リスティング ファイル) | Microsoft Learnマシンコード…

ふるさと納税の限度額計算

去年分の確定申告(還付申告)が終わったので、今年のふるさと納税の計画を立てたい。 まずは 総務省 | ふるさと納税のしくみ | 税金の控除について を参照。 ここの③の式と③'の式が連立する金額がふるさと納税で損をしない限度額となるようだ。 すなわち (ふ…

Windows で rsync (cygwin使用)

ディレクトリの同期に便利な rsync ですが、 以前は Windows でも sshd の動いているホストに対して cygwin (https://www.cygwin.com/) の rsync が使えていました。それがいつの間にかコマンドプロンプトやバッチファイルから使えなくなっていました。仕方…

Windows の Emacs の shell-mode で git commit --amend や git rebase -i するときに Emacs で編集したい

普通の commit なら C-x v v で Emacs の中で編集できるんですが、git commit --amend したい場合など、shell-mode 内だとエディタが起動できないってエラーになります。そんなときのために ~/.emacs や ~/.emacs.d/init.el に以下を入れておきます。 (serve…

python で Windows の My Pictures フォルダのパスを取得(OneDrive対応)

python でピクチャフォルダのパスを取得したくて調べました。OneDrive を使用しているとリダイレクトされてるので、環境変数から組み立てるのではだめでした。ついでに Local AppData のパスも取得してます。 import ctypes.wintypes CSIDL_LOCAL_APPDATA = …

spirit x3 double_ パーサの精度が悪い件

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>…

JaneStyle 4.00 で migemo 検索したい場合の注意点

PC を入れ替えたので JaneStyle 4.00 (4.0.0.5) で migemo 検索を使えるようにしようとしてうまくいかず、一か月放置してたのですが、やっと解決法を見つけたのでメモ。http://egg.5ch.net/test/read.cgi/software/1535090252/700最近の cmigemo DLL では動…

改元対応の記録

私の作ってる Windows アプリケーションの改元対応の記録です。 2018年5月(改元1年前) Windows はレジストリの更新で改元に対応するとのことなので、元号選択肢の取得はレジストリから、日付の和暦への変換はそれまでは独自実装だったが Windows API の GetD…

struct と class はマングリングが異なるので混同してはいけない。

BCC では大丈夫だったので、不完全な struct の宣言にも class を使う習慣になってしまっていたのですが、VC ではリンク時にエラーになります。一つ目のモジュール struct Foo { }; Foo* CreateFoo() { return new Foo; } void PrintFoo(const Foo&) { } 二…

文字列の類似度

文字列の類似度を文字バイグラムの頻度ベクトルのなす角のコサインや、文字バイグラムの重複集合のダイス係数で計算する件について書こうと思っているのですが、なかなか進みませんw

VC141+OWLNext 6.44.2 用の CMakeLists.txt

VC141+OWLNext 6.44.2 用の CMakeLists.txt の例です。pdf.cpp と pdf.rc から pdf.exe を生成する場合です。ランタイムライブラリは静的リンクです。 cmake_minimum_required(VERSION 3.11) project(pdf CXX) set(OWL "C:/lib/owl/6.44.2") ### OWLパス set…

Microsoft Print to PDF で C/C++ コードから出力ファイル名を指定する方法

Windows 10 標準装備の仮想プリンタ Microsoft Print to PDF ですが、作成されるPDFファイル名をアプリケーションプログラムのコードから指定できないか探していたところ、以下を見つけました。How to programmatically print to PDF file without prompting…

自前のインサートイテレータ

BCC582 (C++Builder 2006) では問題なかった下記のような自前のインサートイテレータがあります。 template <class X> class MyInsertIterator { public: MyInsertIterator(X& x) : x_(&x) {}; MyInsertIterator& operator = (const Foo& v) { x_->Add(v); return *th</class>…

cmake で bcc582 と vc141 一気にビルド

1本の CMakeLists.txt と数本の短いバッチフィルで、2つのコンパイラ bcc582 と vc141 をそれぞれ使って、さらにそれぞれの debug バージョンと release バージョンを一気にビルドするためのメモです。今後付け足していく予定です。ディレクトリ構造 . ; ソ…

Windows で ionice

Windows で、ビルド(特にリンク)とかディスクアクセスが多い処理をさせている最中、他の作業をやろうとしてもディスクアクセスが遅くてイライラすることがありませんか?CPUの優先度を下げるのは start /low や cygwin の nice を使えばできますが、IOの優先…

Emacs で C++ Builder 付属の grep で検索してジャンプ

Windows で GNU Emacs 25.2.1 を使っていますが、cygwin の egrep だと shift-jis の2バイト文字が検索できないので、C++ Builder 付属の grep を使って検索をして、検索結果からジャンプできるようにしてみました。~/.emacs に以下を入れます。 (load "grep…

ブログスタート

主に C++ で Windows のソフトウェア開発を行っています。そこで調べたことや気づいたことを書いて行こうと思います。 現在使っているのは Borland C++ Builder 2006、もう12年も前のコンパイラです。フレームワークは OWLNext 6.30.4 で、OWL 2.0 の頃から…