ぶろぐ

日記です


正直初めて聞いた言葉たち

  • 利権
    • 公務員じゃないのに公務員並みの待遇、というのはどういうメカニズムなのか?
    • 黒い影が見える気がするけど何だろう
  • ワークシェア
    • わーくしぇあ!
  • スクーターはCVTだよ
    • 新型のビックスクーターとかは電子制御CVTだよ
      • スカイウェイブ650はすごく早い
        • 四輪並のCVTを目指す、がこいつのコンセプト
        • 軽自動車660cc、こいつ650cc。駆動系もゴージャス。これはヤバイ!が日本では人気ない。やっぱスズキはいい仕事するな!
      • シルバーウィング400乗ったけどなかなか早かった!

無段変速機(むだんへんそくき)、または(変速比)連続可変トランスミッション(Continuously Variable Transmission:CVT)とは歯車以外の機構を用い変速比を連続的に変化させる動力伝達機構(トランスミッション)である。多くはオートバイや自動車用を指すが、それらに限らず工作機械の軸回転速度を変える機構や発電機の出力を変える機構[1]などにも広く使われている。
無段変速機 - Wikipedia

うー。。。

もっと社会の勉強したいなぁ
頭いいやつは色々知ってるし、考えているし、軽くついていけないレベルだなぁとか思った。言い過ぎか。おかしいな、同級生なんだけどな。頭サボらせすぎているみたいだ。

うう

今日は何もしなくていいや
EffectiveJavaを流し読みして眠たくなったら眠ろう。
だんだんとピンとくるようになってきてる気がしてる…かな?
実は最近浮動小数点の計算誤差で躓いたんだ…orz
10.2*100 = 1020だけど

System.out.println(10.2 * 1000); //動くかは知らない

したら1019.99999999…になっちゃう…
簡単に検証したかったらjsがいいかも

alert(parseFloat(10.2) * parseFloat(100)); //chromeのコンソールに貼っつけよう!

で、この状態で小数点第一を切り捨てたら1円の誤差。
筆算したら普通に1020なので何故?!循環小数を初めて理解したとき並の衝撃だったけど

  • 2進数の0.1 = 10進数の0.5
  • 2進数の0.01 = 10進数の0.25
  • といったように、2の累乗割る1で小数点は表現される

ので、10進数の小数を2進数の小数で表現できない場合がある…orz
これが噂の演算誤差…
コンピューター=ハイパー正確
と思っていたのに小数点では実は微妙に誤差があったとは…
こんな基本的なことも理解していなかったなんて悲しい
計算機の理論とか情報工学とかちゃんと勉強したほうがいいんじゃね?と悲しくなる。
小数点部分の2進数による表現を理解していなかった。
BigDecimal使うのがベストのようだけど、小数点第一までしか考慮しないし、小数点第一は切り捨てるので

  • 小数点第二を四捨五入
  • 小数点第一を切り捨てて整数に

で対応した(既存がそうしてたし、という言い訳付き)

alert(Math.round(parseFloat(10.2) * parseFloat(100) * 10) / 10);
/**
 * 計算クラスとか?
 * ちょっとかっこよく書くとこうかも
 * (これが正しいのか知らないけど)
 */
var CalcUtils = {
  multiFloat : function(num1, num2) {
    return Math.round(parseFloat(num1) * parseFloat(num2) * 10) / 10;
  }
};

alert(CalcUtils.multiFloat(10.2, 100)); // 1020

「項目31 正確な答えが必要ならば、floatとdoubleを避ける」
だ。

みんな疲れてきているよー!
明日代休もらった!
先輩も、同期も、そしてオレも疲れてるぜー的な空気出し始めた。
ぶっちゃけ甘えているよなーorz
ふつーにやる気出してガシガシ仕事片付ければいい話なんだけどなー(あれ?精神論?)
栄養ドリンク飲んで血糖値を上げるぜ!