ई हार्डवेयर सत्यापन भाषा में log2 की छत की गणना कैसे करें

'ई' भाषा में 'ilog2' फ़ंक्शन है लेकिन मुझे 'लॉग 2 की छत' प्रकार की आवश्यकता है - ऐसा करने का सबसे अच्छा तरीका क्या है?

मैं सिस्टम कमांड के माध्यम से एक पर्ल का आह्वान कर सकता हूं और POSIX :: ceil का उपयोग कर सकता हूं ...

1

3 उत्तर

पर्ल स्क्रिप्ट को आमंत्रित करना कम्प्यूटेशनल महंगा हो सकता है। इसके बजाय पूर्णांक में लॉग 2 और टाइपकास्ट (सुनिश्चित करें कि ई-भाषा इसका समर्थन करता है) में 0.5 जोड़ें।

एक और प्रयास:

  Let y = ilog2(x);
  if ((x & x-1) == 0)  //Check if x is power of 2 
      return y; 
  else 
      return y+1;
1
जोड़ा
ilog2 केवल परिणाम का पूर्णांक हिस्सा देता है, इसलिए मुझे यकीन नहीं है कि 0.5 और टाइपकास्टिंग जोड़ने से कैसे मदद मिलेगी .. विस्तृत करें
जोड़ा लेखक user2400361, स्रोत
ओह ने "ilog2" को नहीं देखा है, एक और शॉट दे रहा है - हालांकि फिर से यह सुनिश्चित नहीं है कि ई-भाषा बिटवाई और ऑपरेटर का समर्थन करती है या नहीं
जोड़ा लेखक Bharat Jain, स्रोत

मैंने ऐसा कुछ किया होगा:

ceil_log2(in : uint): uint is {  
    var bottom := ilog2(in);  
    result = (in == ipow(2,bottom)) ? bottom : bottom + 1;  
};
1
जोड़ा

यदि आपको वास्तविक में ऐसा करने में कोई फर्क नहीं पड़ता है:

ceil_log2(in: uint): uint is {
  result = ceil(log10(in)/log10(2)).as_a(uint);
};
0
जोड़ा