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), বরং রা বিট প্যাটার্ন রিইন্টারপ্রেট করে। সাধারণ প্রোগ্রামিং-এ কমই লাগে।