2016-02-01から1ヶ月間の記事一覧

貯蔵庫サンプリング(Reservoir sampling)

入力(数>n)からn個をランダムに選択する方法。1. 最初のn個をI[0]...I[n-1]にコピーする。t = n - 1。 2. 入力値がなかったら、5へ。 3. ++tとし、[0, t]の一様乱数uを生成する。 u >= nならば、2へ。 4. I[u] = I[t]とし、2へ。 5. Iをソートして終了。 #in…

選択サンプリング法(selection sampling technique)

N個の中からランダムにn個のを選択するためのアルゴリズム 1. t = 0, m = 0とする。 2. [0, 1]の一様乱数uを生成する。 3. もし、 (N - t) * u >= n - m ならば5へ。それ以外ないなら4へ。 4. tを採用し、++t, ++mとする。もしm 5. ++tとし、2へ。 template <typename U></typename>…

C++のクラスをC#で継承する。swig使用。

まさかこんなことができるとは思っていなかった。 やりたいこと C++で定義されたコードをC#で継承してい使用する。 参考 http://www.swig.org/Doc1.3/CSharp.html cpp class Base { public: virtual ~Base() {} virtual void tell() const = 0; }; class Cal…

market convention

金利系 Interest Rate Instruments and Market Conventions Guide

開発環境

Visual studio 2015 Swig Github TortoiseGit Cygwin

Mix-InによるCloneableの実装

c++

したいこと clone関数を継承によって実装したい。 下記のような感じにしたい。 A, Bはクラスはclone関数をオーバーライドしていないけど、Cloneableを継承することで、cloneができるようになる。 struct B : public Cloneable とすることで、BはAを継承した…

std::vector<T>をC#から使えるようにする。

swigを使用。 SwigSample.i %include std_vector.i %template(VectorDouble) std::vector<double>; のようにすればよい。C#でVectorDoubleという名前でstd::vectorが使用できるようになる。あとはいつも通り swig -csharp -c++ SwigSample.i</double>

C#で作ったdllをExcel/VBAから呼び出す方法。

c#

参考 Excel から使うマネージDLL を作る。 | supermab's blog 課題 関数にsummaryを書き、xmlを生成したが、Excel/VBAでは表示されない。 下記のコードの意味がよく分からない。 [ComRegisterFunctionAttribute] private static void RegisterFunction(Type …

パースしたJSONを違うobjectに変換する。

c++

したいこと {"person" : {"name" : "testname", "age" : 29}} のようなデータから class Person { std::string _name; int _age; }; class Data { Person _person; }; のDataクラスに変換する。 ソースコード https://github.com/nishiba/object_creator int…

JSON構文

c++

JSONの原典 JSON JSONの構文 データは "name" : value データはカンマ区切り 波括弧{}はオブジェクト 角括弧[]は配列を表す JSONのvalueの型 数値 文字列 ブール 配列 オブジェクト null JSON構文チェック 下記サイトで構文を確認できる。 https://syncer.jp…

enum classをfor文で回す。

c++

#define GENERATE_ENUM_ITERATOR(T) \ inline T operator++(T& x) { return x = (T)(std::underlying_type<T>::type(x) + 1); } \ inline T operator*(T c) { return c; } \ inline T begin(T r) { return static_cast<T>(0); } \ inline T end(T r) { T l = T::LA</t></t>…

boost::spirit::qiを使って電卓っぽいものを作る。

c++

コードをgithubにアップ。 nishiba/boost_spirit_sample 実行し、”1 + max(2, 3) * 4"と入力すると、"13"と返ってくる。 ------------------------------------------------ # 1 + max(2, 3) * 4OK13 ------------------------------------------------