কম্পিউটার

পিএইচপি-তে ফ্লোটিং পয়েন্ট মানগুলির তুলনা।


পিএইচপিতে, সমতার জন্য ফ্লোটিং পয়েন্টের মান পরীক্ষা করা সমস্যাযুক্ত, কারণ একটি ফ্লোটিং পয়েন্ট নম্বর অন্যটির সমান কিনা তা পরীক্ষা করার সময় পিএইচপি ব্যর্থ হচ্ছে। ফ্লোটিং পয়েন্ট সংখ্যার একই মান থাকা সত্ত্বেও বাস্তবে অভিন্ন হওয়ার প্রয়োজন নেই। তাই এই প্রবন্ধে আমরা ফ্লোটিং-পয়েন্ট সংখ্যার তুলনায় যে সমস্যাটির সম্মুখীন হচ্ছি এবং এই সমস্যা এড়াতে বিভিন্ন পদ্ধতি তুলে ধরব৷

উদাহরণ

একটি সাধারণ উদাহরণ দিয়ে এটি পরীক্ষা করা যাক:

<?php
   $a = 0.14;
   $b = 1 - 0.86; //0.14
   if($a == $b ){
      echo 'a and b are same';
   }
   else {
      echo 'a and b are not same';
   }
?>

আউটপুট:

a and b are not same.

ব্যাখ্যা:

এই কোডে, if কন্ডিশনের পরিবর্তে else কন্ডিশন চালানো হয়, যদিও $a এবং $b একই। এটি ফ্লোটিং-পয়েন্ট মানগুলির বৈশিষ্ট্যের কারণে যেভাবে তারা অভ্যন্তরীণভাবে উপস্থাপন করা হয়েছিল। বাস্তব সময়ে এই সমস্যা এড়াতে আসুন পিএইচপি-তে বিভিন্ন ক্ষেত্রে আলোচনা করি।

কেস1:

কম্পিউটার সিস্টেমে গণনার ক্ষুদ্রতম পার্থক্য ব্যবহার করে ফ্লোটিং পয়েন্ট মানগুলির তুলনা প্রদর্শন করুন৷

উদাহরণ:

<?php
   $val1 = 2.183459;
   $val2 = 2.183450;
   $epsilon = 0.00001;
   if(abs($val1 - $val2) < $epsilon) {
      echo "True";
   }
   else {
      echo "False";
   }
?>

আউটপুট:

True

ব্যাখ্যা:

এখানে আমরা epsilon এর পাশাপাশি দুটি ফ্লোটিং পয়েন্ট ভেরিয়েবল val1 এবং val2 ব্যবহার করছি। তারপরে আমরা abs() নামের নেটিভ ফাংশনটি ব্যবহার করে ভেরিয়েবলের (val1 এবং val2) পরম পার্থক্য নিই। এই কোডটি আমাদের পরম মান দেবে কিন্তু প্রশ্ন হল আমরা কেন পরম মান নিচ্ছি? উত্তর হল আমরা দেখতে পাচ্ছি যে উভয় মানেরই দশমিকের পর একই সংখ্যা রয়েছে 5 পর্যন্ত, যা PHP-এর পক্ষে তুলনা বিশ্লেষণ করা কঠিন।

কেস 2:

রাউন্ড() ফাংশনের ব্যবহার।

<?php
   $val1 = 9 - 6.2;
   $val2 = 1.8;
   var_dump(round($val1, 2) == round($val2, 2));
?>

আউটপুট:

bool(true)

ব্যাখ্যা:

এখানে আমরা দুটি ফ্লোটিং পয়েন্ট ভেরিয়েবল val1 এবং val2 ব্যবহার করছি। তারপরে আমরা রাউন্ড () নামে পূর্বনির্ধারিত ফাংশনটি ব্যবহার করছি যা বৃত্তাকার অফ ফ্লোটিং মান দুটি দশমিক স্থান পর্যন্ত এবং তারপরে এটি তুলনা করি। এখানে আমরা আমাদের প্রত্যাশিত ফলাফল সঠিক উপায়ে পেতে পূর্বনির্ধারিত রাউন্ড() ফাংশন ব্যবহার করছি।


  1. PHP-তে array_count_values() ফাংশন

  2. পিএইচপি-তে serializeArray থেকে POST মানগুলি কীভাবে পাবেন?

  3. C# এ ফ্লোটিং পয়েন্ট লিটারেল কি?

  4. C# এ পূর্ণসংখ্যা লিটারাল বনাম ফ্লোটিং পয়েন্ট লিটারেল