प्रोलॉग में फ्लोट से पूर्णांक को कैसे परिवर्तित करें?प्रोलॉग में फ्लोट को पूर्णांक में परिवर्तित करें
मैंने कोशिश की:
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
प्रोलॉग में फ्लोट से पूर्णांक को कैसे परिवर्तित करें?प्रोलॉग में फ्लोट को पूर्णांक में परिवर्तित करें
मैंने कोशिश की:
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
विधेय integer/1
है कि आप का इस्तेमाल किया सच है iff अपने तर्क एक पूर्णांक है। चूंकि शब्द truncate(sqrt(9))
नहीं एक पूर्णांक है, विधेय नहीं पकड़ करता है और इसलिए इस अवधि के लिए विफल रहता है।
आप अलग अलग संख्या अभ्यावेदन के बीच रूपांतरण के लिए विधेय (is)/2
उपयोग कर सकते हैं
वहाँ आप क्या चाहते हैं पाने के लिए कम से कम दो तरीके हैं। विशेष रूप से, अंकगणित फ़ंक्शंसround
, truncate
और ceiling
देखें। उदाहरण के लिए:
?- X is round(sqrt(9)). X = 3.
हालांकि, ध्यान दें कि चल बिन्दु संख्या का उपयोग हमेशा अत्यधिक समस्याग्रस्त है। उदाहरण के लिए:
?- X is sqrt(2^10000). ERROR: is/2: Arithmetic: evaluation error: `float_overflow'
भी इस तरह के गोलाई त्रुटियों और संभव अधःप्रवाह के रूप में अन्य मुद्दों कर रहे हैं।
चल बिन्दु संख्या के निहित कमियों के कारण, मैं दृढ़ता से आप अधिक सामान्य तंत्र बजाय का उपयोग करें। उदाहरण के लिए कई प्रोलॉग सिस्टम तर्कसंगत संख्या और असंबद्ध परिशुद्धता वाले पूर्णांक का समर्थन करते हैं, जबकि फ्लोट हमेशा मशीन परिशुद्धता तक ही सीमित होते हैं।
आप पूर्णांक वर्ग जड़ों की जरूरत है, उदाहरण के परिमित डोमेन की कमी के लिए इस्तेमाल करते हैं।
?- X*X #= 9, X #>= 0. X = 3.
यह भी बड़ा पूर्णांक के लिए काम करता है:
?- X*X #= 2^10000, X #>= 0. X = 1412467032...(1496 digits omitted)
के लिए clpfd देखें की कमी के साथ, यह राज्य के लिए क्या एक पूर्णांक X
कि सकारात्मक वर्ग जड़ को दर्शाता है के लिए रखती है पर्याप्त होता अधिक जानकारी।