ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

std::numeric_limits<float>::min()について重大な思い違いをしていた話

何があった

線形探索で最大値を探すコードを書いていた。
簡単化するとこんな感じ。

using namespace std;

float FindMax(const vector<float>& source)
{
	float max = numeric_limits<float>::min();	// floatの最小値で初期化してるつもり
	for(const auto& value : source)
	{
		if( max < value )
		{
			max = value; //maxは最小値で初期化してるから必ず一度はここを通るはず
		}	
	}
	return max;
}

でも動かしてみるとなんだか挙動がおかしい。
なんか負数しかないデータ列が来た時に一度もmaxが更新されない。
おかしいと思ってデバッガで初期値を見てみると「1.17549e-38」になってる。
よく見たら正の数なんですがそれは。

どういうことなのか

numeric_limit::min() は確かに「最小値」を返すんです。
でも浮動小数点に限っては「最小値」っていうのは「表現可能な中で絶対値的に最も小さい値」みたいなものを指してるんですね。
正確には「正の正規化数のうち最小のもの」みたいです。
なのでマイナスの絶対値がすごくでっかい値が帰ってくるわけではないんですね。

じゃあどうするのか

numeric_limits::lowest() を使いましょう。
こっちはちゃんと最小値を返してくれます。
ちなみに、qnan みたいな無効値で初期化すると max < value が必ず false と評価されるのでうまく行きません。

棒読みちゃんのReplaceTag.dicを自動生成するやつ

つくりました

 棒読みちゃん淫夢語録再生させたくなったけど、辞書手書きするのめんどくせーよなーって思ってつくりました。実はすでに同じようなプログラムがあるのですが、いろいろあって自分でつくりました。
 使い方とかは github の README を見てください。

MONSTER DROPPER

合作だ!

YUKIYANAGI氏との合作です! 合作オンリーのアルバムで OUT NOW! おまけにFREEだ!


f:id:NU_Pan:20160607200723j:plain
いろいろモリモリな感じになりました。なんで trap っぽい要素ぶち込んだのか自分でもわからない。スタブはわりと会心の出来だと思った(小並感)
割りとゆきやんやなぎまるくんさんにおんぶにだっこでした…(小声)

続きを読む

FLYING FAFNIR(NU-Pan UK Hardcore Bootleg)

ヘンタイモノノベ!

イリスちゃんかわいいと思う。おっぱい大きいし。チョロいし。Fxxk Mononobe.


f:id:NU_Pan:20160515202220p:plain

曲的には割りと素直に UK Hardcore っぽくっていうか J-CORE っぽくっていうかにしました。
いっつもジャンル表記迷うんですけど、どうするのが正解なんですかね?

完成間近に DeeMax くんが 2.0 にバージョンアップしたのでプロジェクトに取り込んでみたのですが、心なしかクオリティが上がった気がしますね?
あと Maximus のサチュレーターは音がピキピキするからあんま良くないなぁと思いました。

エコノミー回避はできないっぽいことが判明したのでクオリティ重視でエンコードしてみました。映像音声合わせて最大 1000[kbps] くらいですかね?
今までの動画よりも重たいから回線細いと読み込みしんどいかも。

続きを読む

M3

CDに参加してます

ラーメン部のアルバムに参加してます。
過去のオリジナル曲を手直しした奴と合作での参加です。

続きを読む