コンテンツへスキップ
ものがたり
戻る

2006-05-16

浮動小数点の実装はエラい大変です。Doubleで言えばParse()もそうだけど、ToString()だってそう。ウソだと思ったらコレ直してみてください。ハマります。

strtodみたいな、libcの基本的な関数でも、昔Monoで引っ張ってきたBSDのソースなんかが普通に新しいバージョンに変わっていたりしたのを思い出した。そんなものを探していたのも、古いstrtod実装に無限ループのバグがあったからだ。

Googleに引き抜かれて(?)いった高校生…もう大学生か…Benも、BigIntegerからハカーになったのだけど、これもけっこう面倒なことをやっている。

Double.Parse()なんて、国際化して小数点の文字とかNumberFormatInfoを考慮して実装しても、WindowsがUnicode Standardsに従っていない部分もある。MonoはUnicode標準のデータをもとにこの辺を実装しているのだけど、.NETユーザーが、数値や日付の書式が違うって言ってくる度に変更しているので、設計の観点で言えば醜いことこの上ない。って最近いじってるのは僕なんだけど。個人的には、標準技術に従っていないWindows/.NETの数値日付書式みたいな負の遺産は流しておきたいところだ。

nullable explicit conversions

#monoで中の一人が見つけてきた2.0 cscのバグ。Nullable Typeってのは、直前になって仕様が変わってあたふたしていた奴だ。

public class Tset  

{  

	public void Foo (object d)  

	{  

		object q;  

		q = (double?) ((decimal) d);  

	}  

}

そういえばunboxしたvalue typeでも同じようにcastできませんな。ECMA-334の該当セクションは13.2。

…で、これはexplicit conversionの外にあるnullable castingをexplicit conversionのひとつとして実装を移動するとか、その程度の問題だろうから、そんなに難しくないと思うんだけど、報告したらMicrosoftの中の人が週末に持ち込んで直して$100ゲットできるのかな。


この記事を共有:

前の記事
nullable explicit conversions
次の記事
今日のMonoDevelop