2018-01-01から1年間の記事一覧

なぜ双対数(二重数)で微分を求められるのか・・・?

前回記事の冒頭でサラッと流した部分の補完。 [C++]constexprに双対数(二重数)を実装する - 地面を見下ろす少年の足蹴にされる私を導入するだけで、なぜに2項目に微分が計算されるのでしょうか。純に数学的には微分環との関連が云々・・・、と日本語でお…

[C++]constexprに双対数(二重数)を実装する

双対数(二重数) 双対数とは、実数に対してとなるような実数ではない要素を導入し、任意の実数a,bを用いてと表わされる数です。見ての通り複素数()と似たもので、性質を考えるときに複素数の考え方が役立ちます。 を導入すると何が嬉しいのか?テイラー展…

[C++]配列の参照、その書き方

C++ではおよそ全ての型に対して、その実体へのエイリアス(別名)として参照を宣言できます。少しだけ安全なポインタとして扱うことが出来、コンパイル後はポインタと同じコードになります(ならない処理系もあるかもしれません)。そして、配列もまたその参…

[C++]final指定子と最適化

final specifier final指定子はC++11にてoverride指定子とともに導入されたもので、指定した関数がオーバーライドされないことを明示し、オーバーライドされた場合にコンパイルエラーを起こすものです。 また、クラスに対しても指定でき、継承できないことを…

[C#]Visual Studio 2015でC#7.0以降を利用する

Visual Studio 2019のプレビュー版も出そうな時にまだ2015なんて使ってるんですか??奇遇ですね。Visual Studio 2015を強いられている間に、C#はもう8.0を伺うところまで進歩しています。タプルやらspanやら便利なものや構文が追加されています。しかしVS20…

[C++]surrogate call function(代理呼び出し関数)なるもの

surrogate call functionなる物をたまたま見かけたけども、特に日本語の記事とかなかったので調べてみました。 surrogate call function?? 以下のような動作をする関数オブジェクトのような何かのことです。 template<typename Func1, typename Func2> struct Surrogate { constexpr Surrog</typename>…

[C++]メンバに参照型を持つクラス(構造体)の取り扱い

C++のクラスはそのメンバとして任意の参照型を持つことができます。その初期化はコンストラクタ初期化子のみで行えますが、それ以降参照そのものを変更することはできません(その変数に対する代入等の操作は全て参照先に対する操作になるため)。そのような…

[C++]カルダノの公式により3次方程式の解を求める

カルダノの公式 1. 3次の係数を1にする 2. 2次の項を削除する 3. 式の次数を落とす(2次式にして考える) 4. 得られた各値より解を求める 3次方程式の判別式 D = 0 となる場合 D > 0 となる場合 D < 0 となる場合 まとめ C++実装 参考文献 カルダノの公式 カ…

[C++]狭義の弱順序(strict weak orderings)とは?

STLにおいて値の大小比較が必要なところでは、operator<を使うかCompare型の関数オブジェクトを渡すことで任意の型についての順序を決定できるようになっています。その時、その順序付けの性質として「狭義の弱順序(もしくは厳密で弱い順序、strict weak ord…

C++でコンパイル時に偶数/奇数の配列が欲しかった

ので、テンプレートでメタプログラミングしてみた。コンパイル時という事でconstexprを使えばいいのですが、いかんせん欲しかった環境がVS2015だったので(C++14のconstexprの制限緩和に非対応)、TMPで生成することにしました。戦略としては、コンパイル時…

C++コンパイル時の型をチェックできるTypeDisplayer

TypeDisplayerというものをたまたま見かけて、割と使えそうだったので試してみました。TypeDisplayerとは以下のようなコードです。 template<typename... T> struct TypeDisplayer; 一見ただのプライマリテンプレートですが、別に特殊化も何もせずこのまま使います。 int ma</typename...>…

Visual Studio 2015で.Net Standard2.0を要求するnugetパッケージを利用する

VS2015を投げ捨てろって?ごもっともです。しかし、やりたくてもできないこともあるのです・・・主にReactivePropertyの事ですが、nugetのライブラリの中には.Net Standardのバージョンを要求しているものが増えてきました。 しかし、無視して何も考えずにnu…

std::aligned_storageを正しく使うためのstrict aliasing rulesとstd::launder

※この記事の結論は間違っています、信用しないでください。 詳しくは以下をご覧ください。https://t.co/w5mqNbdfay 例えばint x2 = *std::launder(reinterpret_cast<int*>(&data));がOKになる理由は、アクセス時型情報を根拠とするstruct aliasing ruleとは無関係</int*>…

C++ 各バージョン毎の規格書

C++をある程度できるようになった気になってくると、ググっただけでは解決しない(もしくは、得心が行かない)事が増えてくると思われます。 そんな時、C++の全てを定めた原典たる規格書を参照しようという気持ちが強まっていくことでしょう。 しかし、規格…

CUDAデバイスメモリ用のunique_ptr

先日、他の人の書かれたCUDAコードをいじる機会があり、その際に気になったことのメモ。CUDAでホスト側からデバイスメモリ(GPU側メモリ)を確保する際には、cudaMallocとcudaFreeをセットで使用しますが、free操作は自動でやっていただきたいのでunique_ptr…

便利なstd::chronoのリテラル演算子

C++11以降、STLを使っているだけでもstd::chronoの時間単位の値が必要になることは多いと思います。その時、整数をそのまま指定出来たらいいのですがそれはできません(std::chrono::durationのコンストラクタがexplicit指定されているため)。仕方ないので…

boost.asioのTCP/UDP通信時のBufferに関するメモ

boost.asioでTCP/UDP通信をしようと思うと、まずその辺のサンプルコードをとりあえず写経するでしょう。その際、送受信するバッファのためにasioの求めるバッファを使う事になるでしょう。しかも、UDPとTCPで別々のバッファを使う事になったり、asio::buffer…