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);
You can't, basically (except, as noted, for the trivial case of powers of 2, which can be obtained via the shift operator).
You can hard-code the value and add a comment, or you can use a static readonly
, but note that static readonly
doesn't have the same "bake into the call-site" semantics. In most cases that doesn't present a problem.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.