2011年6月24日金曜日

phpのfloorで値がずれた

いまさらながらPHP(に限った話か?)のfloat(浮動小数点数)の特性にきづかされたのでメモ php.netでおもいっきり注意しろよって書いてあったけど全然 気をつけていなかった。 floatの値を取るデータを扱っている箇所で下二桁までの値を有効として 下三桁を破棄する為の処理を以下のような感じで実装。
$val = 1.10;
echo $val;
$val = floor($val*100)/100;    // (a)
echo $val;
そうすると現象としては こうした場合に結果としては 1.10 1.09 という結果になります。下の値としては1.10を期待していたが、実際には そうならなかった。 これを読み解くと、 floatの特徴として10進数で『0.10』や『0.70』で表現されたデータでも内部的には 2進数である為に、実際には『0.9999....』や『0.6999....』であるらしい。 前述のコードの(a)を分析すると 1)$val*100(浮動小数点数と整数の乗算) ここで内部的には『109.999....』。echo等でテキスト出力すると『110』 2)【(1)】をfloorで小数の切捨て ここで内部的には『109』。echo等でテキスト出力すると『109』 3)【(2)】/100(浮動小数点数の割算) ここで内部的には『1.09』。echoやテキスト値としては『1.09』 という具合になる。 詳しくはphp.netのfloatを読むとスッキリするはず。 ちなみに似た実装や論理で本来の目的を果たしたい場合には 任意精度数学関数またはgmp関数を使えとマニュアルに 書いてあります。 上記に従い取った対策は以下
$val = bcmul($val,100,2) / 100
因みにまだまだ気になる場合にはfloatを使わないという選択肢を選ぶのも また良い選択になりそう。 久しぶりに勉強になった。

2011年6月22日水曜日

バーレスクを観た

クリスティーナ・アギレラ主演のミュージカル映画。
ミュージカル映画とあるけど、登場人物の心情をミュージカルで表現するようなシーンは
あんまり印象に無かったかも。ショービジネスの世界を描いているのであったとしても割り
と自然な感じで導入されており、比較的すっと入れました。

主人公は超良い子だね。応援したくなる感じ。個人的には物語が進むにつれてショーの内容
が近代的になっていった感じがしたのがうまいなぁと思った。
題名の通りちょっとエロティズムを感じさせる内容ですが、心はまっすぐなので『健康的』
な内容だと思う。何はともあれアギレラさん良い仕事してます。


バーレスク [DVD]

2011年6月15日水曜日

アキハバラ@DEEPを読んだ

読み貯めた本の感想の吐き出し。
登場人物がいわゆるIT界の底辺と言われる環境で働くも、夢を描いて行動していく
という話。みんな20代前半か10代後半ぐらいかねぇ。いいなぁ、青春だなぁ。

個人的にオチは想像してた通りで安心して読めた。スカっとする事うけあい。
そして今後の展開があるならばかなり面白そうだなーと思わせる内容。面白かった。


アキハバラ@DEEP (徳間文庫)