投稿

ラベル(programing)が付いた投稿を表示しています

久しぶりの投稿

何気なく見た サイト に今まで紹介された記事を見たことのないメソッドを見つけた。 Objects.hash() これは地味に便利なメソッドじゃない? JJUG CCC 2011 SpringでもOracleの寺田氏は紹介してなかったと思う。あれは概要だから仕方なかったのか? 7月7日のイベントではじっくり説明されるのかな? Effective Javaにこのネタ載っているし、第3版に記載させる確率高い重要なメソッドな気がする。 ...パッケージはjava.langでなくjava.util。なんでだ。 Obujects.hashCode()とか似たものがある。見ただけじゃ使い方よくわからない。いじってみるか。

セマンティクスってなに

「セマンティクス」という単語をあちこちで見かけていたけど、 今までどんな意味かよくわかっていなかった。 シンタックス(文法)に対してセマンティクスは「意味」「意図」を 表現することみたい。 参考にしたサイト JavaA2Z ではアクセス修飾子protectedで作成者の意図を 表現する例を挙げた。 「意図した使い方は便利に、意図しない使い方は使いにくく設計する。」 というような言葉がどっかにあったと思うけど、これはセマンティクスを プログラムにしっかり織り込むことすすめている話なのかも。 他には... 多分引数にconstを記述するのもセマンティクスの話だろう。 javaでいうと@Overrideアノテーションとか。 プログラミング言語XXや言語入門~などの書籍はシンタックスを紹介し、 Effective XXのような書籍は良いセマンティクスを紹介しているんじゃないかな。 なんかこう、制約を課すような文法はセマンティクスを内包している感じがする。    

丸め誤差で散々悩む

Rhinoを使ってスクリプティングをちょっと試してたところ、妙な計算結果に遭遇。 (100.5-30.4)*15.2=1065.5199999999998 掛け算しかしていないんですけど…。 全く原因がわかららず、   windowsの電卓 誤差無し   Ruby(1.8.5)   誤差無し   ActivePerl    誤差無し で試してみる。でも正しく計算されてしまいました。 これってRhinoのバグかしら。Bugzillaの使い方覚えなくちゃかしら。 とか考えるほど混乱。 頭を冷やすため、それからしばらくこの件は放置していました。 先日Firefox3のβをいじっていたところ、不意にこの件を思い出し、 javascriptの処理系が違ったら…ということで調べてみることに。 Firefox3とIE7で同じ計算をさせたところ、同じ誤差が発生し バグでないことが判明しました。 これ何なのさ…と調べ、"2進数表現による丸め誤差" という結論に たどり着きました。 長かった…。 ついでに手元にある他の処理系で試してみた。 【誤差有り】   java(6)   jruby(1.1 java6) (javaの影響)   Firefox(3 bate5)   IE(7) 【誤差無し】   C#(C#3.0)   C++(VC++9.0) C++で丸め誤差が発生しないのはびっくり。古めの言語だから逆に仕様として Javaのように丸め誤差が残っているものと思っていたのに。 Microsoftが気を利かせたのか、ISOの標準C++とかだとOKなのか。 面倒臭がって調べていない。 JavaはBigDecimalとかのクラスによって解決法を提供しているため、 言語仕様では(わざと?)誤差が残っているみたい。