summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/Double.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscorlib/src/System/Double.cs')
-rw-r--r--src/mscorlib/src/System/Double.cs226
1 files changed, 134 insertions, 92 deletions
diff --git a/src/mscorlib/src/System/Double.cs b/src/mscorlib/src/System/Double.cs
index 1e4e477366..f2c5cec219 100644
--- a/src/mscorlib/src/System/Double.cs
+++ b/src/mscorlib/src/System/Double.cs
@@ -11,19 +11,20 @@
**
**
===========================================================*/
-namespace System {
- using System;
- using System.Globalization;
- using System.Runtime.InteropServices;
- using System.Runtime.CompilerServices;
- using System.Runtime.ConstrainedExecution;
- using System.Diagnostics.Contracts;
-
-[Serializable]
-[StructLayout(LayoutKind.Sequential)]
+using System;
+using System.Globalization;
+using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+using System.Runtime.ConstrainedExecution;
+using System.Diagnostics.Contracts;
+
+namespace System
+{
+ [Serializable]
+ [StructLayout(LayoutKind.Sequential)]
public struct Double : IComparable, IFormattable, IConvertible
- , IComparable<Double>, IEquatable<Double>
+ , IComparable<Double>, IEquatable<Double>
{
internal double m_value;
@@ -35,22 +36,24 @@ namespace System {
// Note Epsilon should be a double whose hex representation is 0x1
// on little endian machines.
- public const double Epsilon = 4.9406564584124654E-324;
+ public const double Epsilon = 4.9406564584124654E-324;
public const double NegativeInfinity = (double)-1.0 / (double)(0.0);
public const double PositiveInfinity = (double)1.0 / (double)(0.0);
public const double NaN = (double)0.0 / (double)0.0;
-
+
internal static double NegativeZero = BitConverter.Int64BitsToDouble(unchecked((long)0x8000000000000000));
[Pure]
[System.Runtime.Versioning.NonVersionable]
- public unsafe static bool IsInfinity(double d) {
+ public unsafe static bool IsInfinity(double d)
+ {
return (*(long*)(&d) & 0x7FFFFFFFFFFFFFFF) == 0x7FF0000000000000;
}
[Pure]
[System.Runtime.Versioning.NonVersionable]
- public static bool IsPositiveInfinity(double d) {
+ public static bool IsPositiveInfinity(double d)
+ {
//Jit will generate inlineable code with this
if (d == double.PositiveInfinity)
{
@@ -64,7 +67,8 @@ namespace System {
[Pure]
[System.Runtime.Versioning.NonVersionable]
- public static bool IsNegativeInfinity(double d) {
+ public static bool IsNegativeInfinity(double d)
+ {
//Jit will generate inlineable code with this
if (d == double.NegativeInfinity)
{
@@ -77,7 +81,8 @@ namespace System {
}
[Pure]
- internal unsafe static bool IsNegative(double d) {
+ internal unsafe static bool IsNegative(double d)
+ {
return (*(UInt64*)(&d) & 0x8000000000000000) == 0x8000000000000000;
}
@@ -96,11 +101,14 @@ namespace System {
//
// Returns a value less than zero if this object
//
- public int CompareTo(Object value) {
- if (value == null) {
+ public int CompareTo(Object value)
+ {
+ if (value == null)
+ {
return 1;
}
- if (value is Double) {
+ if (value is Double)
+ {
double d = (double)value;
if (m_value < d) return -1;
if (m_value > d) return 1;
@@ -112,10 +120,11 @@ namespace System {
else
return 1;
}
- throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDouble"));
+ throw new ArgumentException(SR.Arg_MustBeDouble);
}
- public int CompareTo(Double value) {
+ public int CompareTo(Double value)
+ {
if (m_value < value) return -1;
if (m_value > value) return 1;
if (m_value == value) return 0;
@@ -129,51 +138,61 @@ namespace System {
// True if obj is another Double with the same value as the current instance. This is
// a method of object equality, that only returns true if obj is also a double.
- public override bool Equals(Object obj) {
- if (!(obj is Double)) {
+ public override bool Equals(Object obj)
+ {
+ if (!(obj is Double))
+ {
return false;
}
double temp = ((Double)obj).m_value;
// This code below is written this way for performance reasons i.e the != and == check is intentional.
- if (temp == m_value) {
+ if (temp == m_value)
+ {
return true;
}
return IsNaN(temp) && IsNaN(m_value);
}
[System.Runtime.Versioning.NonVersionable]
- public static bool operator ==(Double left, Double right) {
+ public static bool operator ==(Double left, Double right)
+ {
return left == right;
}
[System.Runtime.Versioning.NonVersionable]
- public static bool operator !=(Double left, Double right) {
+ public static bool operator !=(Double left, Double right)
+ {
return left != right;
}
[System.Runtime.Versioning.NonVersionable]
- public static bool operator <(Double left, Double right) {
+ public static bool operator <(Double left, Double right)
+ {
return left < right;
}
[System.Runtime.Versioning.NonVersionable]
- public static bool operator >(Double left, Double right) {
+ public static bool operator >(Double left, Double right)
+ {
return left > right;
}
[System.Runtime.Versioning.NonVersionable]
- public static bool operator <=(Double left, Double right) {
+ public static bool operator <=(Double left, Double right)
+ {
return left <= right;
}
[System.Runtime.Versioning.NonVersionable]
- public static bool operator >=(Double left, Double right) {
+ public static bool operator >=(Double left, Double right)
+ {
return left >= right;
}
public bool Equals(Double obj)
{
- if (obj == m_value) {
+ if (obj == m_value)
+ {
return true;
}
return IsNaN(obj) && IsNaN(m_value);
@@ -182,9 +201,11 @@ namespace System {
//The hashcode for a double is the absolute value of the integer representation
//of that double.
//
- public unsafe override int GetHashCode() {
+ public unsafe override int GetHashCode()
+ {
double d = m_value;
- if (d == 0) {
+ if (d == 0)
+ {
// Ensure that 0 and -0 have the same hash code
return 0;
}
@@ -192,44 +213,52 @@ namespace System {
return unchecked((int)value) ^ ((int)(value >> 32));
}
- public override String ToString() {
+ public override String ToString()
+ {
Contract.Ensures(Contract.Result<String>() != null);
return Number.FormatDouble(m_value, null, NumberFormatInfo.CurrentInfo);
}
- public String ToString(String format) {
+ public String ToString(String format)
+ {
Contract.Ensures(Contract.Result<String>() != null);
return Number.FormatDouble(m_value, format, NumberFormatInfo.CurrentInfo);
}
-
- public String ToString(IFormatProvider provider) {
+
+ public String ToString(IFormatProvider provider)
+ {
Contract.Ensures(Contract.Result<String>() != null);
return Number.FormatDouble(m_value, null, NumberFormatInfo.GetInstance(provider));
}
-
- public String ToString(String format, IFormatProvider provider) {
+
+ public String ToString(String format, IFormatProvider provider)
+ {
Contract.Ensures(Contract.Result<String>() != null);
return Number.FormatDouble(m_value, format, NumberFormatInfo.GetInstance(provider));
}
- public static double Parse(String s) {
- return Parse(s, NumberStyles.Float| NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo);
+ public static double Parse(String s)
+ {
+ return Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo);
}
- public static double Parse(String s, NumberStyles style) {
+ public static double Parse(String s, NumberStyles style)
+ {
NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
return Parse(s, style, NumberFormatInfo.CurrentInfo);
}
- public static double Parse(String s, IFormatProvider provider) {
- return Parse(s, NumberStyles.Float| NumberStyles.AllowThousands, NumberFormatInfo.GetInstance(provider));
+ public static double Parse(String s, IFormatProvider provider)
+ {
+ return Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.GetInstance(provider));
}
- public static double Parse(String s, NumberStyles style, IFormatProvider provider) {
+ public static double Parse(String s, NumberStyles style, IFormatProvider provider)
+ {
NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
return Parse(s, style, NumberFormatInfo.GetInstance(provider));
}
-
+
// Parses a double from a String in the given style. If
// a NumberFormatInfo isn't specified, the current culture's
// NumberFormatInfo is assumed.
@@ -238,34 +267,46 @@ namespace System {
// PositiveInfinity or NegativeInfinity for a number that is too
// large or too small.
//
- private static double Parse(String s, NumberStyles style, NumberFormatInfo info) {
+ private static double Parse(String s, NumberStyles style, NumberFormatInfo info)
+ {
return Number.ParseDouble(s, style, info);
}
- public static bool TryParse(String s, out double result) {
- return TryParse(s, NumberStyles.Float| NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out result);
+ public static bool TryParse(String s, out double result)
+ {
+ return TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out result);
}
- public static bool TryParse(String s, NumberStyles style, IFormatProvider provider, out double result) {
+ public static bool TryParse(String s, NumberStyles style, IFormatProvider provider, out double result)
+ {
NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
return TryParse(s, style, NumberFormatInfo.GetInstance(provider), out result);
}
-
- private static bool TryParse(String s, NumberStyles style, NumberFormatInfo info, out double result) {
- if (s == null) {
+
+ private static bool TryParse(String s, NumberStyles style, NumberFormatInfo info, out double result)
+ {
+ if (s == null)
+ {
result = 0;
return false;
}
bool success = Number.TryParseDouble(s, style, info, out result);
- if (!success) {
+ if (!success)
+ {
String sTrim = s.Trim();
- if (sTrim.Equals(info.PositiveInfinitySymbol)) {
+ if (sTrim.Equals(info.PositiveInfinitySymbol))
+ {
result = PositiveInfinity;
- } else if (sTrim.Equals(info.NegativeInfinitySymbol)) {
+ }
+ else if (sTrim.Equals(info.NegativeInfinitySymbol))
+ {
result = NegativeInfinity;
- } else if (sTrim.Equals(info.NaNSymbol)) {
+ }
+ else if (sTrim.Equals(info.NaNSymbol))
+ {
result = NaN;
- } else
+ }
+ else
return false; // We really failed
}
return true;
@@ -275,82 +316,83 @@ namespace System {
// IConvertible implementation
//
- public TypeCode GetTypeCode() {
+ public TypeCode GetTypeCode()
+ {
return TypeCode.Double;
}
- /// <internalonly/>
- bool IConvertible.ToBoolean(IFormatProvider provider) {
+ bool IConvertible.ToBoolean(IFormatProvider provider)
+ {
return Convert.ToBoolean(m_value);
}
- /// <internalonly/>
- char IConvertible.ToChar(IFormatProvider provider) {
- throw new InvalidCastException(Environment.GetResourceString("InvalidCast_FromTo", "Double", "Char"));
+ char IConvertible.ToChar(IFormatProvider provider)
+ {
+ throw new InvalidCastException(SR.Format(SR.InvalidCast_FromTo, "Double", "Char"));
}
- /// <internalonly/>
- sbyte IConvertible.ToSByte(IFormatProvider provider) {
+ sbyte IConvertible.ToSByte(IFormatProvider provider)
+ {
return Convert.ToSByte(m_value);
}
- /// <internalonly/>
- byte IConvertible.ToByte(IFormatProvider provider) {
+ byte IConvertible.ToByte(IFormatProvider provider)
+ {
return Convert.ToByte(m_value);
}
- /// <internalonly/>
- short IConvertible.ToInt16(IFormatProvider provider) {
+ short IConvertible.ToInt16(IFormatProvider provider)
+ {
return Convert.ToInt16(m_value);
}
- /// <internalonly/>
- ushort IConvertible.ToUInt16(IFormatProvider provider) {
+ ushort IConvertible.ToUInt16(IFormatProvider provider)
+ {
return Convert.ToUInt16(m_value);
}
- /// <internalonly/>
- int IConvertible.ToInt32(IFormatProvider provider) {
+ int IConvertible.ToInt32(IFormatProvider provider)
+ {
return Convert.ToInt32(m_value);
}
- /// <internalonly/>
- uint IConvertible.ToUInt32(IFormatProvider provider) {
+ uint IConvertible.ToUInt32(IFormatProvider provider)
+ {
return Convert.ToUInt32(m_value);
}
- /// <internalonly/>
- long IConvertible.ToInt64(IFormatProvider provider) {
+ long IConvertible.ToInt64(IFormatProvider provider)
+ {
return Convert.ToInt64(m_value);
}
- /// <internalonly/>
- ulong IConvertible.ToUInt64(IFormatProvider provider) {
+ ulong IConvertible.ToUInt64(IFormatProvider provider)
+ {
return Convert.ToUInt64(m_value);
}
- /// <internalonly/>
- float IConvertible.ToSingle(IFormatProvider provider) {
+ float IConvertible.ToSingle(IFormatProvider provider)
+ {
return Convert.ToSingle(m_value);
}
- /// <internalonly/>
- double IConvertible.ToDouble(IFormatProvider provider) {
+ double IConvertible.ToDouble(IFormatProvider provider)
+ {
return m_value;
}
- /// <internalonly/>
- Decimal IConvertible.ToDecimal(IFormatProvider provider) {
+ Decimal IConvertible.ToDecimal(IFormatProvider provider)
+ {
return Convert.ToDecimal(m_value);
}
- /// <internalonly/>
- DateTime IConvertible.ToDateTime(IFormatProvider provider) {
- throw new InvalidCastException(Environment.GetResourceString("InvalidCast_FromTo", "Double", "DateTime"));
+ DateTime IConvertible.ToDateTime(IFormatProvider provider)
+ {
+ throw new InvalidCastException(SR.Format(SR.InvalidCast_FromTo, "Double", "DateTime"));
}
- /// <internalonly/>
- Object IConvertible.ToType(Type type, IFormatProvider provider) {
+ Object IConvertible.ToType(Type type, IFormatProvider provider)
+ {
return Convert.DefaultToType((IConvertible)this, type, provider);
}
}