例如,是否存在处理此问题的运算符?
float Result, Number1, Number2;
Number1 = 2;
Number2 = 2;
Result = Number1 (operator) Number2;
在过去,^
运算符在其他语言中用作指数运算符,但在C#中它是按位运算符。
我是否必须编写一个循环或包含另一个名称空间来处理指数运算?如果是这样,我如何使用非整数处理指数运算?
发布于 2014-01-11 13:47:48
我偶然发现了这篇文章,希望在我的代码中使用科学记数法,我使用
4.95*Math.Pow(10,-10);
但后来我发现你可以
4.95E-10;
我只是想为我所处的类似情况的任何人添加这一点。
发布于 2017-08-24 15:19:30
当我们寻找一种新的语言来将我们的计算软件从好的vb6转换成指数型运算符时,缺少C#的指数运算符是一个很大的困扰。
我很高兴我们使用了C#,但每当我写一个包含指数的复杂方程时,它仍然困扰着我。Math.Pow()
方法使得方程很难读懂。
我们的解决方案是创建一个特殊的DoubleX
类,在其中覆盖^
-operator (如下所示)
只要您至少将一个变量声明为DoubleX
,这就可以很好地工作
DoubleX a = 2;
DoubleX b = 3;
Console.WriteLine($"a = {a}, b = {b}, a^b = {a ^ b}");
或者在标准双精度数上使用显式转换器:
double c = 2;
double d = 3;
Console.WriteLine($"c = {c}, d = {d}, c^d = {c ^ (DoubleX)d}"); // Need explicit converter
然而,这种方法的一个问题是,与其他运算符相比,指数的计算顺序错误。这可以通过始终在操作周围放置额外的(
)
来避免,这再次增加了读取公式的难度:
DoubleX a = 2;
DoubleX b = 3;
Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + a ^ b}"); // Wrong result
Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + (a ^ b)}"); // Correct result
我希望这能对其他在代码中使用大量复杂方程的人有所帮助,也许有人甚至有一个如何改进这种方法的想法?!
DoubleX
类:
using System;
namespace ExponentialOperator
{
/// <summary>
/// Double class that uses ^ as exponential operator
/// </summary>
public class DoubleX
{
#region ---------------- Fields ----------------
private readonly double _value;
#endregion ------------- Fields ----------------
#region -------------- Properties --------------
public double Value
{
get { return _value; }
}
#endregion ----------- Properties --------------
#region ------------- Constructors -------------
public DoubleX(double value)
{
_value = value;
}
public DoubleX(int value)
{
_value = Convert.ToDouble(value);
}
#endregion ---------- Constructors -------------
#region --------------- Methods ----------------
public override string ToString()
{
return _value.ToString();
}
#endregion ------------ Methods ----------------
#region -------------- Operators ---------------
// Change the ^ operator to be used for exponents.
public static DoubleX operator ^(DoubleX value, DoubleX exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(DoubleX value, double exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(double value, DoubleX exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(DoubleX value, int exponent)
{
return Math.Pow(value, exponent);
}
#endregion ----------- Operators ---------------
#region -------------- Converters --------------
// Allow implicit convertion
public static implicit operator DoubleX(double value)
{
return new DoubleX(value);
}
public static implicit operator DoubleX(int value)
{
return new DoubleX(value);
}
public static implicit operator Double(DoubleX value)
{
return value._value;
}
#endregion ----------- Converters --------------
}
}
发布于 2014-07-31 12:23:01
我很惊讶没有人提到这一点,但对于简单的平方(也可能是最常见的)情况,您只是自己乘以。
float someNumber;
float result = someNumber * someNumber;
https://stackoverflow.com/questions/3034604
复制相似问题