【发布时间】:2012-03-21 19:43:03
【问题描述】:
我正在开发一个基于数学(sin、cos、sqrt 等)的应用程序。 这些函数需要一些时间才能运行,但精度很高。
我的一些客户不需要那么高的精度,但他们需要尽可能快。
所以我有我的 Sin 函数,它是一个简单的数组(在程序开始运行之前创建),它取 0 到 360 之间的度数并返回其sin(假设数组有 360 个值)。
我要创建一个界面:
interface MyMath
{
double PreciseSin(double x);
double PreciseCos(double x);
}
它将被继承
- “精确数学”实现将调用正常的 sin,cos 函数。
- “快速数学”将使用我之前解释的数组技巧。
我的代码将使用“mymath”类型的变量来进行计算,并且在开始时它会使用precisionMath 或fastMath 进行初始化。
最后我的问题是:
- 调用一个调用“Math.sin”而不是直接调用它的虚函数,我将支付多少时间惩罚?
- 编译器是否能够对其进行优化并理解如果我使用 PriciseMath 初始化 MyMath,我只想调用正常的 Sin 和 Cos 函数?
- 我可以更改我的设计以帮助编译器理解和优化我的代码吗?
【问题讨论】:
-
也许继承不适合您的情况。在您决定采用这一技术之前,请先尝试一下其他标准 C++ 技术。
-
需要客户端能够更改精度还是您可以提供两个不同的二进制文件?
-
假设我可以提供不同的二进制文件
标签: c++ optimization inheritance virtual