/// <summary> /// 指数部を設定 /// </summary> public static Original SetExponentBits(this Original value, int exponent) { var bits = (ulong)BitConverter.DoubleToInt64Bits(value); bits &= 0x800F_FFFF_FFFF_FFFF; bits |= (ulong)exponent << 52; return(BitConverter.Int64BitsToDouble((long)bits)); }
/// <summary> /// 仮数部を設定 /// </summary> public static Original SetFractionBits(this Original value, ulong fraction) { var bits = (ulong)BitConverter.DoubleToInt64Bits(value); bits &= 0xFFF0_0000_0000_0000; bits |= fraction; return(BitConverter.Int64BitsToDouble((long)bits)); }
/// <summary> /// 符号ビットを設定 /// </summary> public static Original SetSignBits(this Original value, int sign) { var bits = (ulong)BitConverter.DoubleToInt64Bits(value); bits &= 0x7FFF_FFFF_FFFF_FFFF; bits |= (ulong)sign << 63; return(BitConverter.Int64BitsToDouble((long)bits)); }
/// <summary> /// 仮数部を取得 /// </summary> public static ulong GetFractionBits(this Original value) { return((ulong)BitConverter.DoubleToInt64Bits(value) & 0x000FFFFFFFFFFFFF); }
/// <summary> /// 指数部を取得 /// </summary> public static ushort GetExponentBits(this Original value) { return((ushort)(((ulong)BitConverter.DoubleToInt64Bits(value) >> 52) & 0x7FF)); }
/// <summary> /// 符号ビットを取得 /// </summary> public static byte GetSignBits(this Original value) { return((byte)((ulong)BitConverter.DoubleToInt64Bits(value) >> 63)); }
/// <summary> /// 指定した数値が負または正の無限大と評価されるかどうかを示す値を返します。 /// </summary> public static bool IsInfinity(this Original value) { return(Original.IsInfinity(value)); }