c# - Double和Float共存实现

标签 c# automated-refactoring

我有一个非常大(而且结构又旧又丑,从 Fortran 移植到 C#)的数学库,现在所有的计算都是使用 double 完成的(因为存在不准确之处)。然而,为了将结果与旧实现的结果进行比较,我们有时必须切换回 float - 以检查移植的代码是否正确。

我的想法是以某种方式从第一个库生成第二个库,其中所有变量和调用的方法都被相应的 float 实现替换。是否有任何自动解决方案允许在 float 和 double 之间切换而无需手动实现所有代码两次?我说的是 30000 多行代码。

最佳答案

代码生成可能是您最好的选择 - 使用相同的源代码两次,但将所有 float 操作替换为 double 并自动在另一组中进行一些全局替换。

如果您想保留纯 C# 源代码,您可以滥用 using 指令。有两个独立的项目 - 一个用于float,另一个用于double。让他们都使用相同的源代码文件(一个将拥有它们,另一个将只有链接)。其中一个项目将有一个条件编译常量 FLOAT。不要在源代码中使用 floatdouble,而是使用例如Number,定义为

#if FLOAT
using Number = float;
#else
using Number = double;
#endif

Number 的正确类型将在编译时替换,因此类型推断等一切都可以正常工作。如果源中存在仅影响使用相同链接源代码文件的项目之一的问题,Visual Studio 2015 甚至会发出警告。

关于c# - Double和Float共存实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32140358/

相关文章:

c# - 我怎么知道数据库中是否存在这样的值? (ADO.NET)

c# - 如何下载asp.net文件中的json对象

c# - 列出 LINQ 中的唯一转换

c# - 基类中 protected 静态属性是否是在派生类之间共享数据的良好做法?

haskell - HLint 可以自动执行建议的编辑吗?

c++ - Qt Creator如何重新定义getter和setter函数的创建方式?

c# - 如何将 passwordchar 属性设置为 asp.net 文本框?

python - 让 PyC​​harm 将 Python 函数中的代码提取到嵌套函数中

intellij-idea - Intellij IDEA 在整个项目中提取常量

java - 在java中向函数添加参数