Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

vDSPのフーリエ変換がどのくらい速いのか検証してみた

#include <Accelerate/Accelerate.h> static void dft_manual() { const auto N = 64; const auto xr = std::make_unique<float[]>(N); const auto xi = std::make_unique<float[]>(N); const auto yr = std::make_unique<float[]>(N); const auto yi = std::make_unique<float[]>(N); auto x_re = xr.get(); auto x_im = x…</float[]></float[]></float[]></float[]></accelerate/accelerate.h>

vDSPの内積計算がどのくらい速いのか検証してみた

vDSPの内積計算がどのくらい速いのか検証してみました。 #ifdef __APPLE__ #include <Accelerate/Accelerate.h> #endif int main(int argc, const char * argv[]) { float* a = new float[4096]; float* b = new float[4096]; float* c = new float; for (int i = 0; i < 4096; ++i) {</accelerate/accelerate.h>…

std::partition_point

C++11 で導入されたstd::partition_pointはラムダ式を渡すときに lower_bound,upper_boundに比べて引数が一つ少なくて済むというメリットがある。 const std::vector<int> v = { -50, -20, -10, -7, -1, -2, 21, 22, 26, 27 }; const int val1 = 21; // lower_bou</int>…

256bit(32バイト)にアラインされたメモリを取得する(C++17)

C++17以上ではnewでアラインされたメモリを簡単に取得できるようになりました。 for (int i = 0; i < 10000; ++i) { float* a = new (std::align_val_t{32}) float; auto val = reinterpret_cast<size_t>(a); if ((val % 32) != 0) { assert(false); } } 余談ですが6</size_t>…

C++20で気になる機能

2 つの値の中点を計算する関数が追加された。 浮動小数点型のatomic操作関数が追加された。 円周率の定義が使えるようになった。 コンテナにcontains()関数が追加。 2 の累乗数に関する関数が追加された。 std::make_shared()に配列サポートが追加された。 …

C++17のstd::optional

C++17のstd::optionalはよいので積極的に使っていきましょう。 std::optional swiftのoptionalと同じようなことができるようになりました。 #include <string> #include <optional> struct Data { int x; int y; Data(int x, int y) : x(x) , y(y) { } }; std::optional<Data> makeDa</data></optional></string>…

C++ 無名ラムダ式の即時実行

C++

C++無名ラムダ式の即時実行の仕方です。 無名ラムダ式定義し、即時実行しています。 無名ラムダの場合は引数部分を定義する必要はなく、キャプチャする変数の指定だけが必要です。 const std::vector<int> list = { 1, 2, 3 }; const auto sum = [&]() { return l</int>…

C++14 共有ロック

C++

C++14 で共有ロックというものが実装された。 これは1つのリソースに対して、1つのスレッドが書き込みを行い、2つ以上のスレッドが同時に読み込みを行うケースで用いる。 2つの読み込みスレッドは一つのstd::shard_mutexに対して、lock_shared()(共有ロッ…

macOS Catalina Libraryファイルの属性をnohiddenにする

$ xattr -d com.apple.FinderInfo ~/Library/ $ chflags nohidden ~/Library/

clang-format をいい感じにvimで使う

.vimrc設定 Bundle `cjuniet/clang-format.vim' let g:clang_format_style="{BasedOnStyle: Google, IndentWidth: 4, Standard: C++11}" 以上です。依存するvimプラグインもなくいい感じです。 使い方は整形したい範囲を行選択してCTRL-Kを押すだけ。 シンプ…

C++ 例外クラス

クラスのコンストラクタで異常を上位に返したい場合、例外を用いる以外に術はない。 こんな時は、C++例外クラスをthrowするのが良い。 もちろん例外送出時にはリソースを全て開放しておこう。 C++例外クラスで使えそうなものを上げておく。 いずれも任意の文…

C++11 シングルトン

class Hoge { public: static Hoge& shared() { static Hoge instance; return instance; } private: Hoge(); } C++でシングルトンを作りたい場合は上記のようにすればよい。 C++11より前の仕様では、複数のスレッドからHoge::shared()を呼び出したときにsta…

std::thread 練習帳その1

以下のコードはコンパイルに失敗し、Attempt to use a deleted function となる。 #include <thread> void update(int& data) { data += 2; } int main(int argc, const char * argv[]) { int data = 11; std::thread t(update, data); t.join(); printf("%d\n", dat</thread>…

macOSにて同一のシンボル名のダイナミックライブラリをロードしたらどうなるか

macOSにて同一のシンボル名を持つダイナミックライブラリをロードしたらどうなるかを検証します。 前提条件として、ダイナミックライブラリはインストールパスに@rpathが指定されていることとします。 絶対パスが指定されている場合は、全く異なる動作をしま…

macOS Application バイナリが持つentitlementを知りたい

$ codesign -d --entitlements :- /Applications/Hoge.appアプリ例その1) Executable=/Applications/Hoge.app/Contents/MacOS/Hoge <plist version="1.0"> <dict> <key>com.app…</key></dict></plist>

macOS コードサインを確認するコマンド

$ codesign -dvvv libblock.dylib Executable=/Users/pebble8888/Library/Developer/Xcode/DerivedData/block-dfwlkkoafjhqccbfqxydkmopdyll/Build/Products/Debug/libblock.dylib Identifier=libblock Format=Mach-O thin (x86_64) CodeDirectory v=20500 s…

C++のシンボルテーブル

macにはnmというシンボルを見るコマンドがあります。 namespace MyNameSpace {class MyObject { public: MyObject(); };MyObject::MyObject() { printf("aa\n"); }} 上記のコードをダイナミックリンクでコンパイルしたモジュールの出力をみてみます。 $ nm a…

ABC予想と宇宙際タイヒミューラー理論

ABC予想が何かという説明はここでは省きます。 整数論の未解決の難しい問題です。 tsujimotterさんのブログなどを参考にしてください。 これを解決したと言われているのが望月新一さんで使った新たな数学の理論が宇宙際タイヒミューラー理論だそうです。 以…

美しい電子顕微鏡写真と構造図で見るウィルス図鑑101

本屋で見かけてなかなか面白そうな本だった。 ウィルスは細菌に比べても小さくて、正二十面体だったり、アポロ宇宙船のように幾何学構造だったりするのが、面白いね。 今回をきっかけにウィルス研究者が増えたりするかもね。 美しい電子顕微鏡写真と構造図で…

米国株式投資する上で参考になる本

米国株式投資をする上で人に勧めるならこれという書籍を紹介します。 億万長者をめざすバフェットの銘柄選択術 超有名人ウォーレンバフェット氏がどのように銘柄を選んでいるかが解説されています。 基本的な事柄を学べます。 バフェット氏は逆張り投資家で…

FIRE 最強の早期リタイア術を流し読みした

FIRE 最強の早期リタイア術を流し読みしてみました。FIRE 最強の早期リタイア術 最速でお金から自由になれる究極メソッド作者:クリスティー・シェン,ブライス・リャン発売日: 2020/03/19メディア: 単行本(ソフトカバー)いわゆる投資で一髪当ててリタイアし…

macOS環境にてバイナリをdisassembleする

~$ cat main.c #include <stdio.h> int main(int argc, char** argv) { int a = 2; int b = 3; int c = a + b; return 0; } ~$ cc main.c ~$ otool -tvV a.out a.out: (__TEXT,__text) section _main: 0000000100000f80 pushq %rbp 0000000100000f81 movq %rsp, %rbp </stdio.h>…

C++11 ムーブセマンティクス

C++11 のムーブセマンティクスがよく分からないので実験してみる。 class Bean { public: Bean() :color(0) ,shape(0) { std::cout << "constructor\n"; } Bean(const Bean& other) : color(other.color) , shape(other.shape) { std::cout << "Bean copy co…

macOS10.15 Catalinaでdockerでpandas環境で米国のファイナンス情報を取得する

Docker Desktop on Macをインストールする。Install Docker Desktop on Mac | Docker Documentationpython3.7が入ったDocker イメージをpullする。 $ docker pull python:3.7 起動する。 $ docker run -it --name pytest python:3.7 /bin/bash yfinanceをイ…

C++アプリケーションの高速化

ボトルネックの計測 まずはどこが遅いか計測しよう。全体の時間の1%の処理を50%高速化しても、0.5%高速化したことにしかならない。 std::chronoを使うのがよいだろう。 シビアなケースでは計測結果をメモリ上に配置しておき、あとでまとめて標準出力やログフ…

swift Intのオーバーフロー演算について

swiftは整数のオーバーフローに関して厳しめの仕様になっている。 Double, Floatには最大値はほぼない。 Double, Floatは不動小数点表現なので、最大値はほぼないと考えて良い。オーバーフロー制御構文は用意されていない。 DoubleをIntに変換するときにオー…

UIColor色のRGB値

(red, green, blue, alpha)UIColor.gray (0.5, 0.5, 0.5, 1) UIColor.lightGray (0.666, 0.666, 0.666, 1) UIColor.darkGray (0.333, 0.333, 0.333, 1) UIColor.magenta (1, 0, 1, 1)

仮想通貨取引の納税

会社の給与以外の所得があり、それが20万円を超えた場合は確定申告を行う必要があります。 この時、国税を国へ、市民県民税を市へ支払う必要があります。 No.1900 給与所得者で確定申告が必要な人|国税庁 例えば、2019年1月1日から2019年12月31日に行った仮…

let's encrypt のACMEv1終了に関するお知らせに対応した

let's encrypt から次のようなメールがきた。 According to our records, the software client you're using to get Let's Encrypt TLS/SSL certificates issued or renewed at least one HTTPS certificate in the past two weeks using the ACMEv1 protoco…

C++でstd::mutexの使い方の誤りを検出するThread Safety Analysis

C++でstd::mutexの使い方の誤りを検出するThread Safety Analysisというのがclangにあるそうです。 Thread Safety Analysis — Clang 10 documentationbitcoin coreのソースで使われていて知ったのですが、xcode でも使えました。 導入手順 1. 192行の mutex.…