2012-12-31 13 views
5
my $num = log(1_000_000)/log(10); 
print "num: $num\n"; 
print "int(num): " . int($num) . "\n"; 
print "sprintf(num): " . sprintf("%0.16f", $num) . "\n"; 

पैदा करता है:पर्ल प्रिंट फ्लोटिंग-पॉइंट नंबरों के लिए सटीकता क्या है?

num: 6 
int(num): 5 
sprintf(num): 5.9999999999999991 

करने के लिए क्या परिशुद्धता पर्ल प्रिंट चल बिन्दु संख्या करता है?

का उपयोग करते हुए: x86_64-linux-धागे की बहु के लिए बनाया गया v5.8.8

+0

नहीं '5.8' !!! रुकें!!! यह कभी अजीब है। '5.10' या उच्चतर का उपयोग करें – gaussblurinc

उत्तर

9

जब चल बिन्दु संख्या stringifying, मुद्रित या अन्यथा के लिए कि क्या, पर्ल आम तौर पर या float.h या सीमा से DBL_DIG का मूल्य LDBL_DIG का उपयोग करता है .h फ़ाइल जहां इसे संकलित किया गया था।

यह आम तौर पर फ़्लोटिंग पॉइंट प्रकार पर्ल की परिशुद्धता का उपयोग गोलाकार नीचे किया जाएगा। उदाहरण के लिए, यदि एक सामान्य डबल प्रकार का उपयोग करते हैं, तो सटीकता 53 बिट्स = 15.9 5 अंक है, और पर्ल आमतौर पर परिशुद्धता के 15 अंकों के साथ स्ट्रिंग करेगा।

संबंधित मुद्दे