दो सामान्य मामलों पर विचार करने के लिए:
पूर्णांक अंकगणित
जाहिर है कि यदि आप पूर्णांक अंकगणित (जो काट-छाँट करते हैं) का उपयोग कर रहे हैं, तो आपको एक अलग परिणाम मिलेगा। यहाँ C # में एक छोटा सा उदाहरण दिया गया है:
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.
फ्लोटिंग पॉइंट अंकगणित
इस तथ्य के अलावा कि विभाजन एक अलग परिणाम दे सकता है जब यह शून्य से विभाजित होता है (यह एक अपवाद उत्पन्न करता है, जबकि गुणा नहीं करता है), यह थोड़ा अलग गोलाई त्रुटियों और एक अलग परिणाम भी हो सकता है। C # में सरल उदाहरण:
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.
यदि आप मुझ पर विश्वास नहीं करते हैं, तो यहां एक फिडेल है जिसे आप निष्पादित कर सकते हैं और अपने लिए देख सकते हैं।
अन्य भाषाएँ भिन्न हो सकती हैं; ध्यान रखें, हालांकि, कई भाषाओं की तरह, C #, IEEE मानक (IEEE 754) फ्लोटिंग पॉइंट लाइब्रेरी को लागू करता है, इसलिए आपको अन्य मानकीकृत रन समयों में समान परिणाम प्राप्त करने चाहिए।
निष्कर्ष
यदि आप ग्रीनफ़ील्ड काम कर रहे हैं , तो आप शायद ठीक हैं।
यदि आप विरासत कोड पर काम कर रहे हैं, और आवेदन एक वित्तीय या अन्य संवेदनशील अनुप्रयोग है जो अंकगणित करता है और लगातार परिणाम प्रदान करने के लिए आवश्यक है, तो संचालन के दौरान बदलते समय बहुत सतर्क रहें। यदि आपको चाहिए, तो सुनिश्चित करें कि आपके पास इकाई परीक्षण हैं जो अंकगणित में किसी सूक्ष्म परिवर्तन का पता लगाएंगे।
यदि आप किसी सरणी या अन्य सामान्य कम्प्यूटेशनल कार्यों में तत्वों को गिनने जैसी चीजें कर रहे हैं, तो आप शायद ठीक हो जाएंगे। मुझे यकीन नहीं है कि गुणन विधि आपके कोड को कोई भी स्पष्ट कर देती है, हालांकि।
यदि आप एक विनिर्देशन के लिए एक एल्गोरिथ्म को लागू कर रहे हैं, तो मैं कुछ भी नहीं बदलूंगा, न केवल गोलाई त्रुटियों की समस्या के कारण, बल्कि इसलिए कि डेवलपर्स कोड की समीक्षा कर सकते हैं और यह सुनिश्चित करने के लिए विनिर्देश के प्रत्येक अभिव्यक्ति को वापस लागू कर सकते हैं कि कोई कार्यान्वयन नहीं है। खामियों।
oldValue >= 0
?