पर डबल परिशुद्धता समस्याओं मैं एक साधारण सी # समारोह है:नेट
public static double Floor(double value, double step)
{
return Math.Floor(value/step) * step;
}
अधिक संख्या में, की तुलना में या "मूल्य" के बराबर है, कि "कदम" के कई है कम की गणना करता है। लेकिन यह परिशुद्धता का अभाव है, निम्नलिखित परीक्षण के रूप में देखा:
[TestMethod()]
public void FloorTest()
{
int decimals = 6;
double value = 5F;
double step = 2F;
double expected = 4F;
double actual = Class.Floor(value, step);
Assert.AreEqual(expected, actual);
value = -11.5F;
step = 1.1F;
expected = -12.1F;
actual = Class.Floor(value, step);
Assert.AreEqual(Math.Round(expected, decimals),Math.Round(actual, decimals));
Assert.AreEqual(expected, actual);
}
पहले और दूसरे का दावा ठीक हैं, लेकिन तीसरे, विफल रहता है क्योंकि परिणाम 6 दशमलव स्थान तक ही बराबर है। ऐसा क्यों है? क्या इसे सही करने का कोई तरीका है?
अद्यतन मैं परीक्षण मुझे लगता है कि मानों 8 दशमलव के बजाय जगह 6 तक बराबर हैं डिबग हैं, तो हो सकता है क्योंकि गणित.गोल कुछ अस्पष्टता परिचय देता है।
नोट मेरे टेस्ट कोड में मैंने "एफ" प्रत्यय (स्पष्ट फ्लोट स्थिर) लिखा जहां मेरा मतलब "डी" (डबल) था, इसलिए यदि मैं इसे बदलता हूं तो मुझे अधिक सटीकता हो सकती है।
लेकिन अपरकेस एफ का अर्थ है डबल, फ्लोट नहीं, है ना? लोअरकेस एफ है जिसका मतलब फ्लोट है। –
नहीं, मैंने अभी जांच की है: फ्लोट एक्स = 1.0; एक त्रुटि देता है, फ्लोट एक्स = 1.0 एफ; ठीक है। एफ केस-संवेदी नहीं है। –
और इसे Ecmea334 में देखा: डबल के लिए 1.0 डी, दशमलव के लिए 1.0 एम। –