Math sınıfının yerel koduna erişebilmemin herhangi bir yolu olup olmadığını merak ediyordum. Daha spesifik olarak sin() yönteminin kodunu görmem gerekiyor.yerel kodu
11
A
cevap
17
Bu, uygulamaya bağımlıdır. java.lang.Math
belgelerinde belirtildiği gibi: sınıf StrictMath
sayısal yöntemler, sınıf Math
eşdeğer işlevleri tüm uygulamalarında, bazı farklı
bit-bit aynı sonuçları için tanımlanmamıştır. Bu gevşeme, katı tekrarlanabilirliğin gerekli olmadığı daha iyi performans gösteren uygulamalara izin verir.... Kod üreteçleri, mevcut olduğunda, platformlara özgü yerel kitaplıkları veya mikroişlemci yönergelerini,
Dalvik (Java Android uygulaması) içinMath
yöntemlerinin daha yüksek performanslı uygulamalarını sağlamak için kullanmaya teşvik edilir. Böyle daha yüksek performanslı uygulamalar halaMath
için şartnameye uygun olmalıdır.
:
Dalvik/vm/InlineNative.c
/*
* public static double sin(double)
*/
static bool javaLangMath_sin(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
JValue* pResult)
{
Convert64 convert;
convert.arg[0] = arg0;
convert.arg[1] = arg1;
pResult->d = sin(convert.dd);
return true;
}
Yani tarafından sağlanan Android'de libm
sin
işlevini çağırır biyonik libc. Yani
biyonik/libm/src benziyor/s_sin.c
double
sin(double x)
{
double y[2],z=0.0;
int32_t n, ix;
/* High word of x. */
GET_HIGH_WORD(ix,x);
/* |x| ~< pi/4 */
ix &= 0x7fffffff;
if(ix <= 0x3fe921fb) {
if(ix<0x3e400000) /* |x| < 2**-27 */
{if((int)x==0) return x;} /* generate inexact */
return __kernel_sin(x,z,0);
}
/* sin(Inf or NaN) is NaN */
else if (ix>=0x7ff00000) return x-x;
/* argument reduction needed */
else {
n = __ieee754_rem_pio2(x,y);
switch(n&3) {
case 0: return __kernel_sin(y[0],y[1],1);
case 1: return __kernel_cos(y[0],y[1]);
case 2: return -__kernel_sin(y[0],y[1],1);
default:
return -__kernel_cos(y[0],y[1]);
}
}
}
ve __kernel_sin
uygulanması
biyonik/libm/src gibi/k_sin.c
görünüyorstatic const double
half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
S1 = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */
S2 = 8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */
S3 = -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */
S4 = 2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */
S5 = -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */
S6 = 1.58969099521155010221e-10; /* 0x3DE5D93A, 0x5ACFD57C */
double
__kernel_sin(double x, double y, int iy)
{
double z,r,v;
z = x*x;
v = z*x;
r = S2+z*(S3+z*(S4+z*(S5+z*S6)));
if(iy==0) return x+v*(S1+z*r);
else return x-((z*(half*y-v*r)-y)-v*S1);
}
__kernel_cos
benzerdir.
İlgili konular
- 1. yerel kodu denetleyin
- 2. JDK'da yerel kodu nereden bulabilirsiniz?
- 3. İbranice/Diğer yerel kodlara referans için yerel ayar kodu?
- 4. Motorola Droid'de Yerel Kod Hata Kodu
- 5. Yerel android kodu LibGDX'e nasıl eklenir?
- 6. C# kodu yerel ikili dosyalar için derlenmiş mi?
- 7. Android kodu ve yerel kod arasında nasıl geri arama yapılır?
- 8. Windows yerel sanal anahtar kodu Qt :: Key'e nasıl dönüştürülür?
- 9. ISO ülke kodu `` `` `` `FR` ise, Yerel Kodu (` Locale.US`, `Locale.FRANCE`) nasıl elde edersiniz?
- 10. .emacs kodu?
- 11. Test kodu
- 12. Hata Kodu Hata Kodu:
- 13. kodu?
- 14. yerel ağ
- 15. Yerel kodumda
- 16. hg fark yerel yerel dosya
- 17. Yerel iOS uygulamalarında yerel iOS uygulamaları, yerel USB
- 18. iframe'de WKWebView yerel dosyası
- 19. testleri mutlaka yüklü kodu
- 20. Yerel görünümü görüntüleyin Eclipse
- 21. bir yerel şubeyi başka bir yerel şubeye birleştirin
- 22. Cyc Server'ı yerel olarak hata ayıklama Yerel olarak
- 23. Django Dil Seçici yerel ve yerel dilde
- 24. Yerel hizmet için kimlik doğrulaması yanıttan yerel
- 25. Yerel değişiklikleri yerel bir dosyaya geri yükleme
- 26. sbt yerel yayınlama: Tanımsız çözümleyicinizi 'Yerel'
- 27. C# Yerel Zaman Kullanıcılar Yerel Saat
- 28. c fonksiyonunun montaj kodu
- 29. Teradata'da kaynak kodu (film kodu) nasıl gizlenir?
- 30. Hata benim kodu doğrulamak zaman PHP kodu
Bir decompiler ister misiniz? – EAKAE
Hayır Kendi sinüs yöntemimi oluşturmaya çalışıyorum ve Math sınıf yönteminin nasıl işlediğini bildiğime inanıyorum. – user2089351