I want to create a structure Degrees for a GPX library. In the XSD for GPX (GPX 1.1 Schema) degreesType is defined as minInclusive = 0 and maxExclusive = 360. The structure now shall have two public static fields MinValue = 0 and MaxValue = x:
public struct Degrees : IFormattable, IComparable, IComparable<Degrees>, IEquatable<Degrees>
{
private decimal value;
public static Degrees MinValue = 0M;
//public static Degrees MaxValue = x;
}
What is the best way to specify the value of x? 360D-1 would be to inaccurate, 360D-0.001 would be an assumption that no one ever wants a better accuracy than 1/1000 degree.
I can think of two approaches:
Have your struct faithfully represent
the fact that the range is specified
with an inclusive minimum and an
exclusive maximum; ie, give your
struct
MinInclusiveandMaxExclusivemembers. This might be regarded as
teaching your struct too much about
the implementation detail of the XSD,
though
Define
MaxValueas the highest representabledecimalvalue less than 360. Sincedecimalis a decimal floating point type, we have to be a little careful here, but I think I’m right in saying that since the smallest possible value is10^-28, and with 360 we have two powers of ten to the left of the decimal point, the relevant value is360 - 10^-26, orI assume you’re taking care of the conversion from
decimaltoDegree. Note that the type declaration character fordecimalismorM–dorDis fordouble.