কম্পিউটার টিউটোরিয়াল

C#-এ BitConverter.Int64BitsToDouble() মেথড: ৬৪-বিট ইন্টিজার থেকে ডাবল রূপান্তর


C#-এ BitConverter.Int64BitsToDouble() মেথডটি নির্দিষ্ট ৬৪-বিট সাইনড ইন্টিজার (long) কে একটি ডাবল-প্রিসিশন ফ্লোটিং-পয়েন্ট সংখ্যা (double) এ রিইন্টারপ্রেট (reinterpret) করে। এটি বিট প্যাটার্ন পরিবর্তন করে না, বরং একই বিট প্যাটার্নকে double হিসেবে ব্যাখ্যা করে।

সিনট্যাক্স (Syntax)

public static double Int64BitsToDouble(long value);

উদাহরণ ১: বড় ইন্টিজার থেকে ডাবল

using System;

public class Demo
{
    public static void Main()
    {
        long d = 9846587687;
        Console.Write("Value (64-bit signed integer) = " + d);
        
        double res = BitConverter.Int64BitsToDouble(d);
        Console.Write("\nValue (double-precision floating point number) = " + res);
    }
}

আউটপুট

Value (64-bit signed integer) = 9846587687
Value (double-precision floating point number) = 4.86486070491012E-314

উদাহরণ ২: ছোট ইন্টিজার মান

using System;

public class Demo
{
    public static void Main()
    {
        long d = 20;
        Console.Write("Value (64-bit signed integer) = " + d);
        
        double res = BitConverter.Int64BitsToDouble(d);
        Console.Write("\nValue (double-precision floating point number) = " + res);
    }
}

আউটপুট

Value (64-bit signed integer) = 20
Value (double-precision floating point number) = 9.88131291682493E-323

কীভাবে কাজ করে (IEEE 754 রিপ্রেজেন্টেশন)

এই মেথডটি long-এর ৬৪ বিটকে IEEE 754 ডাবল-প্রিসিশন ফরম্যাট হিসেবে ব্যাখ্যা করে:

  • বিট ৬৩ (১ বিট): সাইন (০=পজিটিভ, ১=নেগেটিভ)
  • বিট ৫২-৬২ (১১ বিট): এক্সপোনেন্ট (বায়াস ১০২৩)
  • বিট ০-৫১ (৫২ বিট): ম্যান্টিসা (ফ্র্যাকশনাল পার্ট)

বিট লেআউট

| S |    Exponent (11 bits)    |        Mantissa (52 bits)        |
|63 |           62-52          |              51-0                |

বিপরীত অপারেশন: DoubleToInt64Bits()

BitConverter.DoubleToInt64Bits() এই মেথডের বিপরীত কাজ করে।

Round-trip উদাহরণ

using System;

public class RoundTripDemo
{
    public static void Main()
    {
        double original = 3.14159265358979;
        
        // Double -> Long (বিট প্যাটার্ন)
        long bits = BitConverter.DoubleToInt64Bits(original);
        Console.WriteLine($"Original double: {original}");
        Console.WriteLine($"As Int64 bits: {bits} (0x{bits:X})");
        
        // Long -> Double (পুনরুদ্ধার)
        double restored = BitConverter.Int64BitsToDouble(bits);
        Console.WriteLine($"Restored double: {restored}");
        Console.WriteLine($"Exact match: {original == restored}");
    }
}

আউটপুট

Original double: 3.14159265358979
As Int64 bits: 4614256656552045848 (0x400921FB54442D18)
Restored double: 3.14159265358979
Exact match: True

প্রয়োগিক ব্যবহার ক্ষেত্র

  • সিরিয়ালাইজেশন: ডাবল মান বাইনারি ফরম্যাটে সংরক্ষণ
  • নেটওয়ার্ক প্রোটোকল: বাইট অর্ডার (Endianness) নিয়ন্ত্রণ
  • লেভেল-ডেভেলপমেন্ট: ফ্লোটিং-পয়েন্ট বিট ম্যানিপুলেশন
  • টেস্টিং: নির্দিষ্ট বিট প্যাটার্ন (NaN, Infinity, Subnormal) তৈরি

বিশেষ বিট প্যাটার্ন তৈরি

using System;

public class SpecialValues
{
    public static void Main()
    {
        // Positive Infinity: 0x7FF0000000000000
        double posInf = BitConverter.Int64BitsToDouble(0x7FF0000000000000);
        Console.WriteLine($"Positive Infinity: {posInf}");
        
        // NaN: 0x7FF8000000000000
        double nan = BitConverter.Int64BitsToDouble(0x7FF8000000000000);
        Console.WriteLine($"NaN: {nan}");
        
        // Negative Zero: 0x8000000000000000
        double negZero = BitConverter.Int64BitsToDouble(unchecked((long)0x8000000000000000));
        Console.WriteLine($"Negative Zero: {negZero} (equals 0: {negZero == 0})");
    }
}

সতর্কতা: এই মেথডটি মান কনভার্ট করে না (যেমন Convert.ToDouble), বরং রা বিট প্যাটার্ন রিইন্টারপ্রেট করে। সাধারণ প্রোগ্রামিং-এ কমই লাগে।

  1. C#-এ Char.IsLower() মেথড

  2. C#-এ Char.IsLetterOrDigit() মেথড

  3. C#-এ Int16.CompareTo() মেথড

  4. C#-এ BitConverter.DoubleToInt64Bits() মেথড: ডাবল থেকে ৬৪-বিট ইন্টিজার বিট প্যাটার্ন