更新主要问题仍然是示例下的问题,但我想它归结为:
**如果您有一种类型,其中 99% 的值可以用一种快速、强大的类型表示,而只有 1% 的值可以用一种非常重的类型表示,(比如 int 与 BigInteger)如何表示它?**
一所学校,我们学到了很多关于内部表示的知识,但从不知道如何在运行时更改它。我的意思是:假设您有一个表示小数的类,但是您使用整数在内部表示它,直到您实际上需要比整数更大的值,并且仅更改表示形式...
我以前从未想过这一点,当想到它时,我认为这永远不会奏效,因为所有的检查都会杀死它。但是我只是做了一个测试,因为我对自己的利益太好奇了,并且确实存在更改表示方式更持久的情况:给定这个接口:
interface INumber
{
void add1000();
void SetValue(decimal d);
decimal GetValue();
}
我发现这两种实现中的后者在很多情况下都更强大,包括我编写的这个实现,以吸引尽可能多的想法(不是代表,它是社区)
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);
}
}
}
我的问题如下:
这好像…… 我失踪了,但这一定是明显的流血。谁能帮我解决这个问题?
- 是否有混合表示的指导方针,何时使用它们,何时不使用?
- 当没有基准测试的混合表示可以更快时,如何有预感?
- 有什么例子吗?
- 有什么图案吗?
- 对此事有任何想法吗?