C# 在运行时决定复杂类型还是标准双精度类型
C# decide between complex or standard double type during runtime
我正在用 C# 编写一个 sci-comp 应用程序(不要与 comp-sci 混淆),它应该接受用户输入的实数和复数。可能的输入之间的这种差异将理想地反映在流中的许多点上——如果输入是简单的实数,我希望从那里开始创建的所有对象都是简单的双精度数;如果输入有复数,则所有相关对象都必须是复数。 (它们的语法、方法和重载是相同的)
现在,我想这样做的原因是,虽然从一开始就假设所有输入都是复杂的会更安全,但如果我可以使用双精度类型,我可以节省内存(并可能节省处理时间)在适当的时候。我看到这只会消耗所需内存的一半,并且在这些情况下算术运算更简单。
简而言之,在 运行 期间,我的代码将根据用户输入来决定什么更合适,这是可以接受的,因为语法是完全可重用的。我将尝试使用简单的 int 和 double 数据类型来概述一个示例,以使其更清楚:
Console.WriteLine("Enter input: ");
var input = Console.ReadLine();
bool hasValuesAfterComma = isInputFractional(input);
double myVar = Double.Parse(input); // This is executed if hasValuesAfterComma == true,
int myVar = Int.Parse(input); // Otherwise this is considered. All statements after this line work both with double or int types.
如何在 运行 时间内设置合适的数据类型?
P.S。我正在使用 MathNet.Numerics 包及其数据类型来进行线性代数处理。
试试动态变量:
dynamic myVar = hasValuesAfterComma? Double.Parse(input): Int.Parse(input);
我正在用 C# 编写一个 sci-comp 应用程序(不要与 comp-sci 混淆),它应该接受用户输入的实数和复数。可能的输入之间的这种差异将理想地反映在流中的许多点上——如果输入是简单的实数,我希望从那里开始创建的所有对象都是简单的双精度数;如果输入有复数,则所有相关对象都必须是复数。 (它们的语法、方法和重载是相同的)
现在,我想这样做的原因是,虽然从一开始就假设所有输入都是复杂的会更安全,但如果我可以使用双精度类型,我可以节省内存(并可能节省处理时间)在适当的时候。我看到这只会消耗所需内存的一半,并且在这些情况下算术运算更简单。
简而言之,在 运行 期间,我的代码将根据用户输入来决定什么更合适,这是可以接受的,因为语法是完全可重用的。我将尝试使用简单的 int 和 double 数据类型来概述一个示例,以使其更清楚:
Console.WriteLine("Enter input: ");
var input = Console.ReadLine();
bool hasValuesAfterComma = isInputFractional(input);
double myVar = Double.Parse(input); // This is executed if hasValuesAfterComma == true,
int myVar = Int.Parse(input); // Otherwise this is considered. All statements after this line work both with double or int types.
如何在 运行 时间内设置合适的数据类型?
P.S。我正在使用 MathNet.Numerics 包及其数据类型来进行线性代数处理。
试试动态变量:
dynamic myVar = hasValuesAfterComma? Double.Parse(input): Int.Parse(input);