क्या कोई यह बता सकता है कि यह फ़ंक्शन क्या करता है?यह गणित गोल करने का कार्य कैसे काम करता है?
static inline void round_to_zero(volatile float *f)
{
*f += 1e-18;
*f -= 1e-18;
}
मेरा मतलब है 1e-18 जोड़ने और इसे फिर से घटाकर, मैं समझता हूं। लेकिन मुझे समझ में नहीं आता कि इसके पास एक फ्लोट पर क्या प्रभाव होगा। कारण यह समझने की कोशिश कर रहा हूं कि मैं कुछ कोड में युगल का उपयोग कर रहा हूं जो इस फ़ंक्शन का उपयोग करता है (जिसे मैंने फ़्लोट से परिवर्तित किया है)। इसकी ऑडियो कोड, और इसके बाद के संस्करण समारोह इस पुस्तकालय से आता है:
https://github.com/swh/lv2/blob/master/include/ladspa-util.h
मैं अगर यह एक डबल पर काम करेंगे के रूप में है, या अतिरिक्त परिशुद्धता एक डबल है के लिए संशोधित करने की आवश्यकता सोच रहा हूँ। मुझे संदेह है कि यह डेटा के आखिरी कुछ बिट्स को बंद कर देता है, अगर वे वहां हैं तो फ्लोट से उन्हें मिटा दें, हालांकि मुझे समझ में नहीं आता कि कैसे। लेकिन मुझे कल्पना है कि अगर ऐसा होता है, तो मुझे एक्सपोनेंट को डबल के अनुरूप बदलने की आवश्यकता होगी।
TIA, पीट
ऐसा लगता है कि यह बहुत ही अनुकूलित कोड है जो कोड को संभालने वाले अनुमानित प्रकार के डेटा (http://en.wikipedia.org/wiki/Denormal_number) के साथ denormal संख्याओं के आईईईई 754 हैंडलिंग पर निर्भर करता है। इसके अलावा मैं इसका एहसास नहीं कर सकता। – caskey
@caskey 'float' denormal संख्याएं उससे छोटी हैं। – ouah