public virtual void PrintDouble(double value) {
// Use symbolic names for common constants
if (double.IsNaN(value))
sourceEmitterOutput.Write("double.NaN");
else if (double.IsPositiveInfinity(value))
sourceEmitterOutput.Write("double.PositiveInfinity");
else if (double.IsNegativeInfinity(value))
sourceEmitterOutput.Write("double.NegativeInfinity");
else if (value == double.Epsilon)
sourceEmitterOutput.Write("double.Epsilon");
else if (value == double.MaxValue)
sourceEmitterOutput.Write("double.MaxValue");
else if (value == double.MinValue)
sourceEmitterOutput.Write("double.MinValue");
else
sourceEmitterOutput.Write(value.ToString("R")); // round-trip format
}