更新主な質問は例の下にあるもののままですが、私はそれが要約すると:
**値の99%を1つの高速で強力なタイプで表現でき、非常に重いタイプでは1%しか表現できないタイプがある場合(たとえば、intとBigInteger)それを表現する方法は?? ****
私たちが内部表現について多くを学んだ学校ですが、実行時にそれを変更する方法は決してありません。つまり、小数を表すクラスがあるが、実際に整数よりも大きな値が必要になるまで、そして表現を変更するだけで、整数を使用して内部を表すとします。
私はこれまでこれについて考えたことはありませんでした、そしてそれを考えるとき、すべてのチェックがそれを殺すので、それは決してうまくいかないと思いました。しかし、私は自分の利益のためにあまりにも興味があり、表現の変更がより永続的である状況が存在するため、テストを行いました:このインターフェイスを考えると:
interface INumber
{
void add1000();
void SetValue(decimal d);
decimal GetValue();
}
2つの実装の後者は、多くの状況でより強力であることがわかりました。これには、この問題についてできるだけ多くのアイデアを引き付けるために作成したものも含まれます(担当者ではなく、コミュニティです)。
1. Representation by only a decimal
public class Number1:INumber
{
private decimal d { get; set; }
public void add1000()
{
d += 1000;
}
public decimal GetValue()
{
return d;
}
public void SetValue(decimal d)
{
this.d = d;
}
}
2. Representation by a decimal and an int
public class Number2:INumber
{
private bool usedecimal;
private int i;
private decimal d;
public void add1000()
{
if (usedecimal)
{
d += 1000;
return;
}
i += 1000;
if (i > 2147480000)
{
d = i;
usedecimal = true;
}
}
public void SetValue(decimal d)
{
try
{
i = (int)d;
}
catch (OverflowException e)
{
this.d = d;
}
}
public decimal GetValue()
{
return Math.Max(i,d);
}
}
}
私の質問は次のとおりです。
これはsthのようです。私は行方不明になっていますが、これは明らかな出血であるに違いありません。誰かがこれで私を助けることができますか?
- 混合表現のガイドラインはありますか、使用する場合と使用しない場合はありますか?
- 混合表現がベンチマークなしでより速くなることができるとき、どのように予感を持っていますか?
- 例はありますか?
- パターンはありますか?
- この問題について何かアイデアはありますか?