C, C++, এবং Java-এ ফ্লোটিং পয়েন্ট সংখ্যা দিয়ে গাণিতিক অপারেশন করা হয়। কিন্তু ফ্লোটিং পয়েন্ট সংখ্যাগুলো অ্যাসোসিয়েটিভিটি নিয়ম মেনে না।
উদাহরণ কোড
#include <iostream>
using namespace std;
int main() {
float x = -500000000;
float y = 500000000;
float z = 1;
cout << "x + (y + z) is: " << x + (y + z) << endl;
cout << "(x + y) + z is " << (x + y) + z << endl;
return 0;
}
আউটপুট
x + (y + z) is: 0 (x + y) + z is 1
তাত্ত্বিকভাবে দুটোই ১ হওয়া উচিত। কিন্তু ফ্লোটিং পয়েন্ট রাউন্ড অফ এর কারণে ফলাফল ভিন্ন হয়।
x + (y + z)-এ (500000000 + 1) = 500000000 হয়ে যায় (রাউন্ড অফ)। তারপর -500000000 যোগ করলে ০।
(x + y) + z-এ (-500000000 + 500000000) = ০, তারপর +1 = ১।
ইন্টিজার ব্যবহার করলে দুটোই ১ দেবে।