2012-06-18 12 views
5

Android, log2'yi destekliyor mu?
Zaten android uzun çift desteklemiyor buluyorum. cdce3.c kaynak kodununAndroid destekliyor log2

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 

Part: i hata aşağıdaki alınan cdce3.c derlemeye çalıştık

#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) 

source code burada tam bulabilirsiniz.

+5

'log 2 (x) = log (x)/log (2)', kolayca kendi (bilgi işlem rulo böylece log (2) 'ilk). –

+0

Teşekkür ederim, bunu okul matematik programından hatırlıyorum. Ama yapamam, çünkü bazı derleme anahtarlarını değiştirebilirim. Veya log2 işlevini desteklemek için başka bir büyülü yol bulmak. Varsayılan olarak Android'deki log2'yi desteklemeyi tercih ediyorum. Daha önce söylediğim gibi, bazı sihirli tuşlarla. – Arseniy

cevap

4

Android, varsayılan olarak log2 işlevini desteklemiyor gibi görünüyor. Çünkü bu işlevi belirleyen kaynak kodlarda hiçbir yer bulamadım.

7

Senin büyülü yolun burada. Test ettim ve çalıştık:

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

daha hızlı hesaplama:

make CXXFLAGS="-Dlog2\(x\)=\(log\(x\)*1.4426950408889634\)" 
İlgili konular