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

সি/সি++-এ ldexp() ফাংশন: ফ্লোটিং পয়েন্ট স্কেলিং (x × 2^exp)

ldexp() ফাংশনটি একটি ফ্লোটিং-পয়েন্ট নম্বরকে ২-এর ঘাতাংশ দিয়ে গুণ করে (scale করে)। এটি <cmath> (C++) বা <math.h> (C) হেডারে থাকে।

ফাংশন সিগনেচার

double ldexp(double x, int exp);
float  ldexpf(float x, int exp);
long double ldexpl(long double x, int exp);

ফর্মুলা: result = x × 2^exp

উদাহরণ ১: সাধারণ ব্যবহার

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a = 10.0;
    int exp = 2;
    double res = ldexp(a, exp); // 10 × 2² = 10 × 4 = 40
    cout << "The result is = " << res << endl;
    return 0;
}

আউটপুট

The result is = 40

উদাহরণ ২: ওভারফ্লো হ্যান্ডলিং

যদি রেজাল্ট রিপ্রেজেন্টেবল রেঞ্জের বাইরে চলে যায়, তবে HUGE_VAL (বা INFINITY) রিটার্ন করে এবং errno = ERANGE সেট করে।

#include <iostream>
#include <cmath>
#include <cerrno>
#include <cstring>
using namespace std;

int main() {
    double a = 10.0;
    int exp = 5000; // খুব বড় এক্সপোনেন্ট
    errno = 0;
    double res = ldexp(a, exp);
    cout << "The result is = " << res << endl;
    if (errno == ERANGE)
        cout << "Range error occurred (overflow)\n";
    return 0;
}

আউটপুট

The result is = inf
Range error occurred (overflow)

ব্যবহার ক্ষেত্র

  • বাইনারি এক্সপোনেন্ট ম্যানিপুলেশন (ফ্লোটিং-পয়েন্ট বিট-লেভেল অপারেশন)
  • সাইনটিফিক কম্পিউটিং, ডিএসপি, গ্রাফিক্স
  • frexp()-র বিপরীত অপারেশন (frexp ভাগ করে, ldexp গুণ করে)

দ্রষ্টব্য

  • exp নেগেটিভ হলে ভাগ করার সমান কাজ করে (যেমন ldexp(10, -2) = 2.5)
  • পাবনা জেনারেল ফ্লোটিং-পয়েন্ট গুণের চেয়ে দ্রুত এবং সঠিক (এক্সপোনেন্ট ডাইরেক্টলি ম্যানিপুলেট হয়)
  1. C/C++-তে rand() এবং srand() ফাংশন

  2. C/C++-তে putwchar() ফাংশন

  3. C/C++-তে mbsrtowcs() ফাংশন

  4. C/C++-তে system() ফাংশন: কম্যান্ড এক্সিকিউশন