क्या जीएमपी लाइब्रेरी में कोई लॉगरिदम फ़ंक्शन लागू किया गया है?क्या कोई जीएमपी लॉगरिदम फ़ंक्शन है?
7
A
उत्तर
3
जीएमपी में ऐसा कोई कार्य नहीं है। केवल एमपीएफआर में।
5
मुझे पता है तुम नहीं पूछा कि यह कैसे लागू करने के लिए, लेकिन ...
आप एक किसी न किसी एक लघुगणक के गुणों का उपयोग कर लागू कर सकते हैं: http://gnumbers.blogspot.com.au/2011/10/logarithm-of-large-number-it-is-not.html
और जीएमपी पुस्तकालय के आंतरिक: https://gmplib.org/manual/Integer-Internals.html
यहां राशन के लिए मेरा कार्यान्वयन है।
double LogE(mpq_t m_op)
{
// log(a/b) = log(a) - log(b)
// And if a is represented in base B as:
// a = a_N B^N + a_{N-1} B^{N-1} + ... + a_0
// => log(a) \approx log(a_N B^N)
// = log(a_N) + N log(B)
// where B is the base; ie: ULONG_MAX
static double logB = log(ULONG_MAX);
// Undefined logs (should probably return NAN in second case?)
if (mpz_get_ui(mpq_numref(m_op)) == 0 || mpz_sgn(mpq_numref(m_op)) < 0)
return -INFINITY;
// Log of numerator
double lognum = log(mpq_numref(m_op)->_mp_d[abs(mpq_numref(m_op)->_mp_size) - 1]);
lognum += (abs(mpq_numref(m_op)->_mp_size)-1) * logB;
// Subtract log of denominator, if it exists
if (abs(mpq_denref(m_op)->_mp_size) > 0)
{
lognum -= log(mpq_denref(m_op)->_mp_d[abs(mpq_denref(m_op)->_mp_size)-1]);
lognum -= (abs(mpq_denref(m_op)->_mp_size)-1) * logB;
}
return lognum;
}
1
यहाँ
यह है: https://github.com/linas/anant
प्रदान करता है जीएनयू mp वास्तविक और जटिल लघुगणक, exp, साइन, कोसाइन, गामा, arctan, sqrt polylogarithm Riemann और Hurwitz जीटा, संगामी hypergeometric, साइन topologists, और अधिक।