Поддерживает ли Android log2

Поддерживает ли Android log2?
Я уже обнаружил, что Android не поддерживает long double.

Когда я попытался скомпилировать cdce3.c, я получил следующую ошибку:

g++.dg/cdce3.C: In function 'void mlog2f(int)':
g++.dg/cdce3.C:87: error: 'log2f' was not declared in this scope
g++.dg/cdce3.C: In function 'void mlog2(int)':
g++.dg/cdce3.C:87: error: 'log2' was not declared in this scope
g++.dg/cdce3.C: In function 'void olog2f(int)':
g++.dg/cdce3.C:108: error: 'log2f' was not declared in this scope
g++.dg/cdce3.C: In function 'void olog2(int)':
g++.dg/cdce3.C:108: error: 'log2' was not declared in this scope

Часть исходного кода cdce3.c:

#define DEF_MATH_FUNC(prefix, name) NI void prefix##name##f (int x) \
{ \
  float yy = name##f ((float) x); \
  STORE_RESULT; \
} \
NI void prefix##name (int x) \
{ \
  double yy = name ((double)x); \
  STORE_RESULT; \
}
#endif
.........
DEF_MATH_FUNC (m,log2)
DEF_MATH_FUNC (o,log2)

найти полный исходный код здесь.


person Laser    schedule 18.06.2012    source источник
comment
log2(x) = log(x) / log(2), так что вы можете легко свернуть свой собственный (сначала вычислить log(2)).   -  person Alexandre C.    schedule 21.06.2012
comment
Спасибо, я помню это из школьной программы по математике. Но я не могу этого сделать, потому что все, что я могу, это изменить некоторые ключи компиляции. Или найдите другой волшебный способ поддержки функции log2. Я заинтересован в поддержке log2 в Android по умолчанию. Как я уже сказал, возможно, с некоторыми волшебными ключами.   -  person Laser    schedule 21.06.2012


Ответы (2)


Ваш волшебный путь здесь. Я проверил это и работал:

make CXXFLAGS="-Dlog2\(x\)=\(log\(x\)/log\(2\)\)"

более быстрое вычисление:

make CXXFLAGS="-Dlog2\(x\)=\(log\(x\)*1.4426950408889634\)"
person Behrouz.M    schedule 27.02.2016
comment
Разве значение 1/log(2) не должно быть на самом деле 3,32192809489? - person Miro Kropacek; 02.05.2018

Похоже, Android по умолчанию не поддерживает функцию log2. Потому что я нигде не нашел в исходниках определение этой функции.

person Laser    schedule 28.06.2012