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)- পাবনা জেনারেল ফ্লোটিং-পয়েন্ট গুণের চেয়ে দ্রুত এবং সঠিক (এক্সপোনেন্ট ডাইরেক্টলি ম্যানিপুলেট হয়)