C++で四捨五入する

小数点第一桁で四捨五入したい場合は,0.5を足してからint型に変換(切り下げ)すればいい.小数点第n桁以下で四捨五入したい場合は,10n - 1倍してから,0.5を足してint型に変換.その後,10n - 1で割り直す.

#include <cstdio>

int main(){
  float f1 = 5.4;
  printf("%f\n", float(int(f1 + 0.5))); // 5.000000
  float f2 = 3.8;
  printf("%f\n", float(int(f2 + 0.5))); // 4.000000
  float f3 = 2.63;
  printf("%f\n", float(int(f3 * 10 + 0.5)) / 10); // 2.600000
  float f4 = 7.2567;
  printf("%f\n", float(int(f4 * 100 + 0.5)) / 100); // 7.260000
}

XcodeでOpenCVのサンプルを動かす

openCVは,Homebrewを使ってインストールする.

brew install opencv

Xcodeのプロジェクトを作成する.

Xcodeの「Project > Building Settings > Search Paths > Header Search Paths」に「/usr/local/Cellar/opencv」を追加し,設定を「recursive」にする.

「Project > Build Phases > Link Binary With LIbaries」に以下の三つのファイルを追加する.同じファイル名のものが「/usr/local/lib」にもあるが,そっちを追加すると上手くいかないので注意.

  • /usr/local/Cellar/opencv/2.4.12/lib/libopencv_core.2.4.12.dylib
  • /usr/local/Cellar/opencv/2.4.12/lib/libopencv_highgui.2.4.12.dylib
  • /usr/local/Cellar/opencv/2.4.12/lib/libopencv_imgproc.2.4.12.dylib

ここからサンプルプログラムをコピペしてきて動いたら,OK.

opencv.jp - OpenCV: ビデオ入出力(Video I/O)サンプルコード -

参考

openFrameworksで現在のfpsを調べる方法

openFrameworksで現在のfpsを取得する関数はofGetFrameRate()である.以下をofApp::draw()内に書けば,左上に現在のfpsを表示することができる.

ofDrawBitmapString(ofToString(ofGetFrameRate()) + "fps", 20, 20);

参考

openFrameworks.jp

Javaで同じRandom seed値を用いてるのに,プログラムの挙動が異なるとき

プログラムで同じRandom seed値を用いているはずなのに,プログラムの挙動が異なるときがある.

そのようなときはRandomが問題ではなく,HashMapをforループなどで繰り返していることによるランダム性が問題の可能性がある.

HashMapは順序を保証しないため,プログラムを走らすごとに順番が変わる可能性がある. 対処方法としては,順序を保証するLinkedHashMapを使うなど.