বিপুল সংখ্যক লোকের সাথে ডিল করার সময় আমি কেবলমাত্র অসুবিধেটিই ভাবতে পারি যা বর্গাকার হলে উপচে পড়বে।
উদাহরণস্বরূপ, জাভাতে:
int x = Integer.MAX_VALUE / 1000000; //2147
int y = Integer.MAX_VALUE / 5000; //429496
System.out.println("x < y: " + (x < y)); //true
System.out.println("x*x: " + (x * x)); //4609609
System.out.println("y*y: " + (y * y)); //-216779712 - overflows!
System.out.println("x*x < y*y: " + (x * x < y * y)); //false - incorrect result due to overflow!
এছাড়াও টুকুনি যে যখন আপনি ব্যবহার যা হওয়ার তাই হল Math.pow () সঠিক একই নম্বর এবং ডবল থেকে int- এ ঢালাই পিছন থেকে ফিরে সঙ্গে Math.pow()
:
System.out.println("x^2: " + (int) (Math.pow(x, 2))); //4609609
System.out.println("y^2: " + (int) (Math.pow(y, 2))); //2147483647 - double to int conversion clamps to Integer.MAX_VALUE
System.out.println("x^2 < y^2: " + ((int) (Math.pow(x, 2)) < (int) (Math.pow(y, 2)))); //true - but for the wrong reason!
এটা কাজ করছে? কোন , এটি শুধুমাত্র সঠিক উত্তর কারণ দিলেন y*y
হিসাবে ধার্য করা হয় Integer.MAX_VALUE
, এবং x*x
কম Integer.MAX_VALUE
। যদি x*x
এটিকেও ক্ল্যাম্প করা হয় Integer.MAX_VALUE
তবে আপনি একটি ভুল উত্তর পেতে পারেন।
অনুরূপ নীতিগুলিও ফ্লোটস এবং ডাবলসের সাথে প্রযোজ্য (এগুলি বাহিত হওয়ার আগে তাদের স্পষ্টতই আরও বেশি পরিসর থাকে) এবং অন্য কোনও ভাষা যা নিঃশব্দে উপচে পড়ার অনুমতি দেয়।