丸め誤差

今日は単位がらみの訳文エラー検出プログラムを作ってたんですがちょっとばかしハマりました。
原文に「$1.38bn」という文字列があったら訳文に「13億8千万ドル」があるか、みたいなチェックを実装したんですが、ちゃんとそう訳されているのに

「$1.38bn=13億799999999999999千万ドルです!」

とエラーメッセージが出ている。

はあ?

1.38に10を掛けると
1.38×10=13.799999999999999
という計算結果が!

最初はFlashのバグかと思ったんですが、実はこれ、コンピュータの世界では有名な丸め誤差らしいです。
10進数で正確に表せる小数でも2進数(コンピュータの世界)では循環小数になってしまう(有限の桁数で表現できない)ことが多いためだそうです。

これに関連した面白い記事を発見したので興味ある人は読んでみよう!

ちなみに1.38に10を掛けた「13.8」という数字が欲しいなら、「100倍して四捨五入して10で割ればいい」という画期的な方法を発見して「すげーな俺!」と思ったんですが、実はこれも有名な解決策だったらしいっす。。。

Windows 7でIE10が利用可能に

ie10これまでWindows 8専用だったIE10が、ようやく他のOSでも利用可能となりました。

早速、Type 1フォントの問題が解決しているかどうか(ダメモトで)確認するため、Windows 7にインストールしてみました。

結果は… やはり、ダメでした。

あいも変わらず、ブラックアウトしてしまいます。この不具合がIE10でも未解決というのは既知の情報としてあったのですが、最新のビルドでしれっと修正しているかも… という一縷の望みにかけてみたのでした。

ということで、厄介な問題は継続中ということになります。
くれぐれもご注意ください。

Apply a different style to each button on a ToggleButtonBar

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Style>
		.styleA {color: #333399;}
		.styleB {text-decoration : underline;}
	</mx:Style>
	<mx:Script>
		<![CDATA[
			private function creationCompleteHandler():void
			{
				Object(test.getChildAt(0)).setStyle("styleName", "styleA");
				Object(test.getChildAt(2)).setStyle("styleName", "styleB");
			}
		]]>
	</mx:Script>
	<mx:ToggleButtonBar id="test" creationComplete="creationCompleteHandler();">
		<mx:dataProvider>
			<mx:Array>
				<mx:String>AAA</mx:String>
				<mx:String>BBB</mx:String>
				<mx:String>CCC</mx:String>
			</mx:Array>
		</mx:dataProvider>
	</mx:ToggleButtonBar>
</mx:Application>