দুটি সাধারণ বিষয় বিবেচনা করতে হবে:
পূর্ণসংখ্যার গাণিতিক
স্পষ্টতই যদি আপনি পূর্ণসংখ্যার গাণিতিক ব্যবহার করেন (যা কেটে যায়) তবে আপনি একটি আলাদা ফলাফল পাবেন। সি # তে এখানে একটি ছোট উদাহরণ রয়েছে:
public static void TestIntegerArithmetic()
{
int newValue = 101;
int oldValue = 10;
int SOME_CONSTANT = 10;
if(newValue / oldValue > SOME_CONSTANT)
{
Console.WriteLine("First comparison says it's bigger.");
}
else
{
Console.WriteLine("First comparison says it's not bigger.");
}
if(newValue > oldValue * SOME_CONSTANT)
{
Console.WriteLine("Second comparison says it's bigger.");
}
else
{
Console.WriteLine("Second comparison says it's not bigger.");
}
}
আউটপুট:
First comparison says it's not bigger.
Second comparison says it's bigger.
ভাসমান পয়েন্ট গণিত
এটিকে বাদ দিয়ে যে বিভাগটি শূন্য দ্বারা বিভক্ত হয়ে গেলে আলাদা ফলাফল পেতে পারে (এটি একটি ব্যতিক্রম উৎপন্ন করে, যেখানে গুণনটি হয় না), এটি কিছুটা পৃথক গোলাকৃতি ত্রুটি এবং একটি পৃথক ফলাফলের ফলস্বরূপও হতে পারে। সি # তে সহজ উদাহরণ:
public static void TestFloatingPoint()
{
double newValue = 1;
double oldValue = 3;
double SOME_CONSTANT = 0.33333333333333335;
if(newValue / oldValue >= SOME_CONSTANT)
{
Console.WriteLine("First comparison says it's bigger.");
}
else
{
Console.WriteLine("First comparison says it's not bigger.");
}
if(newValue >= oldValue * SOME_CONSTANT)
{
Console.WriteLine("Second comparison says it's bigger.");
}
else
{
Console.WriteLine("Second comparison says it's not bigger.");
}
}
আউটপুট:
First comparison says it's not bigger.
Second comparison says it's bigger.
আপনি যদি আমাকে বিশ্বাস না করেন তবে এখানে একটি ফিডল রয়েছে যা আপনি কার্যকর করতে পারেন এবং নিজের জন্য দেখতে পারেন।
অন্যান্য ভাষা বিভিন্ন হতে পারে; তবে মনে রাখবেন যে সি #, অনেকগুলি ভাষার মতো একটি আইইইই স্ট্যান্ডার্ড (আইইইই 754) ফ্লোটিং পয়েন্ট লাইব্রেরি প্রয়োগ করে , যাতে আপনার অন্যান্য মানক চালানোর সময়ে একই ফলাফল পাওয়া উচিত।
উপসংহার
আপনি যদি গ্রিনফিল্ডে কাজ করছেন তবে আপনি সম্ভবত ঠিক আছেন।
যদি আপনি লিগ্যাসি কোড নিয়ে কাজ করছেন, এবং অ্যাপ্লিকেশনটি একটি আর্থিক বা অন্যান্য সংবেদনশীল অ্যাপ্লিকেশন যা পাটিগণিত সম্পাদন করে এবং ধারাবাহিক ফলাফল প্রদানের প্রয়োজন হয়, অপারেশনগুলির চারপাশে পরিবর্তন করার সময় খুব সতর্কতা অবলম্বন করুন। যদি আপনার অবশ্যই প্রয়োজন হয় তবে নিশ্চিত হয়ে নিন যে আপনার ইউনিট পরীক্ষা রয়েছে যা পাটিগণিতের কোনও সূক্ষ্ম পরিবর্তনগুলি সনাক্ত করতে পারে।
আপনি যদি অ্যারে বা অন্যান্য সাধারণ গণ্য ফাংশনগুলিতে উপাদান গণনা করার মতো কাজগুলি করেন তবে আপনি সম্ভবত ঠিক আছেন। তবে আমি নিশ্চিত নই যে, গুণটি আপনার কোডটিকে আরও পরিষ্কার করে দেয়।
আপনি যদি কোনও নির্দিষ্টকরণে একটি অ্যালগরিদম বাস্তবায়ন করে থাকেন তবে আমি কেবল কিছু পরিবর্তন করব না, কেবলমাত্র গোলাকার ত্রুটির সমস্যার কারণে নয়, তবে বিকাশকারীরা কোডটি পর্যালোচনা করতে এবং কোনও প্রয়োগ বাস্তবায়ন নেই তা নিশ্চিত করার জন্য প্রতিটি অভিব্যক্তিটিকে স্পেসিফিকেশনটিতে ম্যাপ করতে পারে can সংক্রান্ত ত্রুটিগুলি।
oldValue >= 0
?