Having used the exponent operator ^
in the initialisation of a VB class's public constant following this question.
Public Const MaxValue As Double = MaxMantissa * (2 ^ MaxExponent)
I am converting the class to C#. however I find that C# does not have the same operator (^
is still an operator but only as bitwise xor).
Math.Pow()
is given as an alternative to the operator, but cannot be used in a constant expression. How then can one initialise a constant with an exponent expression in C#?
(I do not use a value instead of an expression because the values within the expression, also constant, come from different places. MaxExponent
comes from the base class, MaxMantissa
is different in each derived class. Furthermore there are multiple constants like this in each derived class such as MaxPositiveValue
, MinPositiveValue
, MinNegativeValue
, MaxNegativeValue
, etc.)
Since in your particular case you want to raise 2 into MaxExponent
power
2 ** MaxExponent
you can put it as a left shift, but if and only if MaxExponent
is a small positive integer value:
1 << MaxExponent
Like this
// double: see comments below `1L` stands for `long` and so MaxExponent = [0..63]
public const double MaxValue = MaxMantissa * (1L << MaxExponent);
In general case (when MaxExponent
is an arbitrary double
value), you can try changing const
to readonly
public static readonly double MaxValue = MaxMantissa * Math.Pow(2.0, MaxExponent);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With