प्राप्त करने के लिए पूर्णांक को पूर्ण करने के लिए युगल कास्टिंग करें, इस तत्व को क्रमबद्ध करने के लिए तत्वों से जुड़े स्कोर हैं। यह स्कोर युगल हैं, भले ही कई उपयोगकर्ता वास्तव में पूर्णांक द्वारा क्रमबद्ध करें (उदाहरण के लिए यूनिक्स टाइम्स)।रेडिस (<a href="http://code.google.com/p/redis" rel="nofollow noreferrer">http://code.google.com/p/redis</a>) में गति
जब डेटाबेस सहेजा जाता है तो हमें यह युगल ठीक डिस्क लिखने की आवश्यकता होती है। वर्तमान में इसका उपयोग किया जाता है:
snprintf((char*)buf+1,sizeof(buf)-1,"%.17g",val);
इसके अतिरिक्त अंतिम डेटाबेस फ़ाइल में इसका प्रतिनिधित्व करने के लिए अनंतता और संख्या-संख्या की स्थितियों की जांच भी की जाती है।
दुर्भाग्यवश स्ट्रिंग प्रतिनिधित्व में डबल को परिवर्तित करना बहुत धीमा है। जबकि हमारे पास रेडिस में एक फ़ंक्शन है जो एक पूर्णांक को एक स्ट्रिंग प्रतिनिधित्व में एक तेज़ तरीके से परिवर्तित करता है। तो मेरा विचार यह जांचना था कि डेटा खोने के बिना एक डबल को पूर्णांक में डाला जा सकता है, और उसके बाद पूर्णांक को पूर्णांक को स्ट्रिंग में बदलने के लिए फ़ंक्शन का उपयोग करना है।
इसके लिए पूर्ण गति प्रदान करने के लिए पूर्णांक "समतुल्य" के लिए परीक्षण तेज होना चाहिए। इसलिए मैंने एक चाल का उपयोग किया जो शायद अनिर्धारित व्यवहार है लेकिन यह अभ्यास में बहुत अच्छा काम करता है। ऐसा ही कुछ:
double x = ... some value ...
if (x == (double)((long long)x))
use_the_fast_integer_function((long long)x);
else
use_the_slow_snprintf(x);
मेरे तर्क में डबल कास्टिंग ऊपर एक लंबे में डबल बदल देता है, और उसके बाद एक पूर्णांक में वापस। यदि सीमा फिट बैठती है, और कोई दशमलव भाग नहीं है, तो संख्या रूपांतरण में टिकेगी और प्रारंभिक संख्या के समान ही होगी।
जैसा कि मैं यह सुनिश्चित करना चाहता था कि यह कुछ सिस्टम में चीजों को तोड़ नहीं देगा, मैं freenode पर # सी में शामिल हो गया और मुझे बहुत अपमान हुआ;) तो अब मैं यहाँ कोशिश कर रहा हूं।
क्या कोई ऐसा मानक तरीका है जो मैं एएनएसआई सी के बाहर जाने के बिना करने की कोशिश कर रहा हूं? अन्यथा, उपर्युक्त कोड उन सभी पॉज़िक्स सिस्टम में काम करना चाहिए जो वर्तमान में रेडिस लक्ष्य हैं? यही वह जगह है जहां लिनक्स/मैक ओएस एक्स/* बीएसडी/सोलारिस आजकल चल रहे हैं?
कोड सेंसर बनाने के लिए मैं जो जोड़ सकता हूं, वह कास्ट की कोशिश करने से पहले डबल की सीमा के लिए एक स्पष्ट जांच है।
किसी भी मदद के लिए धन्यवाद।
अपमान, आदमी के बारे में बेकार है। मुझे जवाब नहीं पता, लेकिन मुझे उम्मीद है कि आपको एक मिल जाएगा। – mmr
यदि यह मदद करता है, तो http://stackoverflow.com/questions/638376/what-is-the-most-reliable-way-of-checking-if-a-floating-point-variable-is-an-inte एक था सी # में यह जांचने का तरीका। मुझे अभी तक एक सी संस्करण नहीं मिला है। –
वैकल्पिक रूप से मैं सिर्फ modff() का उपयोग यह जांचने के लिए कर सकता हूं कि आंशिक भाग शून्य है या नहीं? फिर जांचें कि अभिन्न अंग की सीमा लंबे समय तक है, और यदि सही है, तो इसे कास्ट करें। – antirez