プログラミング

定数除算を乗算とシフトでやるやつ

正整数 を固定したとき、色々な非負整数 に対して を求めたい。 を非負整数として という形の演算で求めることを考える。シフトで切り捨てが入るので、 と切り上げにするのがよさそう。誤差を考える。( は非負整数、)とすると、。 より小さくなることはな…

C++で動的2次元配列

要素数が、小さなコンパイル時定数なら int a[Y][X]; でいいのだが、動的に確保しようとすると2次元配列はけっこう面倒。大抵は一番上の方法で足りるけど、下のほうの方法も別に遅くはない。どれも a[2][1] = 3; などと普通に使える。 ここでは、説明のため…

多重ループは再帰で書ける

多重forは再帰で書ける - merom686の日記以前も書いたが、多重ループは再帰で書ける。なかなか使う機会がなかったけど、昨日AtCoderの過去問を解いていたときに使えそうだと思った(使わなかった)。 下のソースは、N以下のすべての正整数の素因数分解を順不…

倍精度の更に倍の精度でマンデルブロ集合

MULXを使うと、多倍長乗算を書くのがかなり楽になる(もちろん速くもなる)。今回は、64bitの汎用レジスタ2個で128bitの符号付き固定小数点数を表し、その加減算と乗算をXbyakで実装した(これは多倍長なのか?)。これまでは速さを求めていたけど、速いとど…

FMAでマンデルブロ集合

x64のAVXでマンデルブロ集合 - merom686's blog↑前回の。今回は、FMAを使った。あまり本質的ではないが、反復回数もAVX2を使うようにした。 xmmA EQU xmm10 xmmB EQU xmm11 xmmC EQU xmm12 xmmD EQU xmm13 xmmE EQU xmm14 xmmF EQU xmm15 ymmA EQU ymm10 ymm…

何作ろう

5月の終わりごろまで囲碁クエストをやっていて、限界を感じてやめた。このままでは、走れないのに野球をやろうとしているようなものだと思った。走れるだけの体力をつけるために、対局中にヒントをもらえるようなUIを作りたいと思った(そんなんで体力つくん…

QVimg公開

http://merom686.g1.xrea.com/soft.html 単純な画像ビューア。ずーっと(2年くらい)作りたいと思っていたが、やっと形になった(ここ1年くらい全く頭回らなかったからね)。まだ不安定かもしれないけど。高速起動にこだわった。他人の環境で動くかどうかは…

物理コアと論理コアの数を取得

Windows 7以降。 論理コアはGetSystemInfoで簡単(Groupが1個じゃない場合はダメ?)。HTの有無はGetLogicalProcessorInformationExをRelationProcessorCoreで。 2CPUとか128コアとかで試したいが、さすがに。 #include <windows.h> #include <stdio.h> int main() { SYSTEM_INFO</stdio.h></windows.h>…

使ってる言語をメモしておく

C++ Visual C++で色々書く。Windowsプログラミングが好き。 新しいことにしかやる気が起きない面があり、いつも難しく手が進まない。 x86アセンブラ どうせVisual C++の中で書くので、C++とあまり区別していない。せいぜいライフゲームくらいの複雑度でしか…

x64のAVXでマンデルブロ集合

Visual C++とMASMでマンデルブロ集合の計算を高速化。 SSE2でマンデルブロ集合 - merom686's blog以前書いたSSE2版 x64 アセンブリ言語プログラミング64bit Windowsでの呼び出し規約 extern "C" void mandel_avx(__m256d *p); __m256d v[6] = {x0_3, x4_7, y…

うっかりして(肉体的に)酷い目に遭った話

イヤホンをしながら、Windowsの音量を変えるプログラムを作っていた。音量ゼロのつもりで間違って0db(最大音量)にしてしまった。 気づくと、例えば大地震の最中のような、身の危険というか危機感というか、そういうものの中にいた。画面には最大音量を表す…

TT_IME 4.0(64bit対応)

http://merom686.g1.xrea.com/soft.html ようやく64bitに対応。64bitのWindowsだと、エクスプローラーからして64bitだからね。対応は必要だった。メッセージでやり取りすることを思いついて、「これで行けるかな」となってからが絶望の連続。とにかく手が動…

マンデルブロ集合描くの速くなったなあ

自分が最初に、マンデルブロ集合を描くプログラムを作ったときは、Pentium IIマシンでVisual Basicを使っていたので、遅かった。300x300とかの小さいやつでも1分近くかかる(当時は小さいと思わなかったけど)。それから数年経って、Visual C++を少し使える…

折る

http://merom686.g1.xrea.com/oru.mp4 スパゲッティを折る話を見て、シミュレーションをしてみようと思った。これがその動画だけど、2次元だしメッシュが粗いし割れ方が適当だしそもそもスパゲッティじゃないし、あんまり信用できない。ぐぅ。どうすれば(手…

神出鬼没のやる気

画像ビューアを作っている。大きい画像をウィンドウに合わせて縮小する必要があり、StretchDIBitsを使ったが速度に若干の不満があった。速さを追求するなら縮小処理を自分で書く必要がある。せっかく楽しくプログラミングしていたのに、話の腰を折られたよう…

Meryでマウスジェスチャ

http://merom686.g1.xrea.com/soft.html待望のSDKが公開され、Meryのプラグインを開発できるようになった。自分用の固定機能だけど、マウスジェスチャを作った。

遅くなる正規表現

JavaScriptの正規表現リテラルに大体マッチする正規表現として下のものを使っていた(Meryのシンタックスハイライト用)。 /(\\.|\[(\\.|[^\]])*\]|[^/\n])+/[gimy]*(?=[ \t]*[.;]) が、これは"\"を大量に含むマッチしない文字列で遅い。最初は無限ループか…

GDI+使うのやめる

今まで、画像を読み込んだり保存したりするときにはGDI+を使っていた。透過PNGやGIFアニメも扱える。遅いのが欠点。表示はGDIで。こちらはそこそこ速いし好きだ。 ところがこの前、"WIC"という単語を見かけて、もっと新しい手段があることを知った。WICで画…

正規表現メモ

JavaScriptの正規表現で難しかったところを調べた。http://ja.wikibooks.org/wiki/JavaScript_%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA_RegExp正規表現の先読みについて解説してみる - http://rubikitch.com/に移転しましたString.…

右辺値参照とか使わないとすぐ忘れる

C++0x ムーブコンストラクタとムーブ代入演算子を暗黙に定義 - Faith and Brave - C++で遊ぼうこれ、前に見たときは「へー追加されたんだ」としか思っていなかった。デフォルトのムーブコンストラクタの中身を読んでいなかった。 が、よく読むと、これは相当…

多重forは再帰で書ける

(追記) AtCoderのABC165のC問題を再帰と多重forで解いた。 ・再帰 https://atcoder.jp/contests/abc165/submissions/12674026 ・多重for https://atcoder.jp/contests/abc165/submissions/12686227 (追記ここまで)C++で、1〜4の数字を1回ずつ使った4桁の…

こんなにコピーコンストラクタ呼ばれるとは思わなかった

#include <iostream> #include <algorithm> using namespace std; class CTest { int i; public: bool operator()(const int &a1, const int &a2) const { cout << "比較" << i << endl; return a1 < a2; } CTest(const CTest &o){ i = o.i + 1; cout << "コピーコンストラクタ" <</algorithm></iostream>…

制限をかけることによるメリットがあるという発想がない

C言語で円周率を100桁計算するくらいのことはできるようになった頃、C++のclassについて知りたい、使えるようになりたいと思い、色々調べた。 しかし、privateの意味がわからない。外からアクセスできなくなるらしいのだが、どういう意味なのかわからない。…

こまごま

http://merom686.g1.xrea.com/soft.htmlストップウォッチとルーペを公開した。簡単な動作なんだからもっと早く作ればよかった。

遅延のない音を求めて

PCは、何でもできる箱である。スピーカーとキーボードが付いているのだから、楽器になるはず。まずMIDIで音を鳴らしてみる。色々な音色が使えるのは嬉しいが、遅延が酷い。これはこれで楽しいが、演奏するという用途で考えると論外。そこで、WAVファイルを用…

引数にconstが付いている意味は?

CreateProcessWの第2引数に文字列リテラルを渡すと死ぬ!確かに「なんでconst付いてないんだろ」と思ったことがあった気がする。愚直に非constを守るか、さもなくば突っ込んで調べるべきだった。 が、ここで、自分はconstの意味を誤解していたことに気づいた…

TT_IME更新

ダウンロードいよいよWindows XPの時代も終わりということで、本格的に手を入れた。TSF対応が中心。TSFは、Text Services Frameworkのこと。ただ、たかがIMEのオンオフを見るだけのことに、ここまでするかという気はする。Google日本語入力専用のライト版作…

ラングトンのループ

http://merom686.g1.xrea.com/langton.htmlJavaScriptで書いてみた。ラングトンの自己複製オートマトン - 人工知能に関する断創録これを見てようやくルールがわかったので。くるくるしていて、けっこうかわいい。簡単に作るため、上下の端は常に0、左右はつ…

Visual C++で多倍長演算ライブラリを使う

任意精度の演算ができるライブラリと言えばGMPだが、Windows環境では使いにくいのが欠点。そしたら、GMPからフォークしたMPIRというライブラリがあった。 ダウンロードしたら、Visual C++ 2010用のmpir.slnがあるのでそれを開く。次にビルドだが、自分の場合…

プログラミングには2種類あると思う

一つは、コンピュータの性能が十分に高い前提で、表現方法を追究すること。もう一つは、存在するハードウェアに対して、その制御方法を考えること。 前者に惹かれる人がある程度多く存在するのは当然のことだと思う。自分も興味がある。これは数学に近い魅力…