Tôi đã tự hỏi nếu có bất kỳ cách nào tôi có thể truy cập vào mã gốc cho lớp Toán. Cụ thể hơn, tôi cần xem mã cho phương thức sin().mã gốc cho lớp Java Toán
Trả lời
Điều này phụ thuộc vào việc triển khai thực hiện. Như đã nêu trong tài liệu hướng dẫn cho java.lang.Math
:
Không giống như một số phương pháp số của lớp
StrictMath
, mọi cài đặt các chức năng tương đương với lớpMath
không được định nghĩa để trả lại chút-cho-bit kết quả tương tự. Sự thư giãn này cho phép triển khai hiệu suất tốt hơn khi không yêu cầu khả năng lặp lại nghiêm ngặt.... Trình tạo mã được khuyến khích sử dụng thư viện gốc hoặc hướng dẫn bộ vi xử lý cụ thể cho nền tảng, nếu có, để cung cấp các phương pháp thực hiện hiệu suất cao hơn theo phương pháp
Math
. Việc triển khai hiệu suất cao hơn như vậy vẫn phải tuân theo đặc điểm kỹ thuật choMath
.
Đối Dalvik (thi hành Android của Java):
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;
}
Vì vậy, nó gọi libm
sin
chức năng, mà trên Android được cung cấp bởi bionic libc. Trông giống như
bionic/libm/src/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]);
}
}
}
và thực hiện các __kernel_sin
trông giống như
bionic/libm/src/k_sin.c
static 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
tương tự.
- 1. Biên dịch java thành mã gốc?
- 2. Mã nguồn phương pháp gốc Java
- 3. Có một API cho Java để tính toán mã không?
- 4. Cách tìm mã nguồn của hàm java gốc
- 5. Lớp có nguồn gốc cho Ruby Thread?
- 6. Truyền mảng byte từ mã gốc sang phía Java
- 7. Hạn chế chức năng mã gốc từ Java
- 8. Tôi có thể biên dịch Java thành mã gốc không?
- 9. Mã giả cho thuật toán của Fortune
- 10. Tính toán gốc thứ n?
- 11. Tạo phương thức gốc java cho hàm tạo
- 12. Thuật toán LIFO (Stack)/Lớp cho Excel VBA
- 13. Gọi cho thành viên của lớp JAVA từ mã Native C/C++
- 14. % toán tử cho BigInteger trong java
- 15. Cổng toán học OpenGL (GLM) cho Java
- 16. Đọc mã gốc JavaScript
- 17. Công cụ phụ thuộc lớp cho Java
- 18. Sử dụng toán tử toán trên các biến chung trong một lớp Java chung
- 19. Gọi một constructor lớp cơ sở từ lớp có nguồn gốc trong Java
- 20. Mã nguồn Java - Process.destroy() cho Linux
- 21. xem mã nguồn gốc từ Eclipse
- 22. Một dòng đơn giản, phương thức mã hóa/giải mã gốc trong Java
- 23. nguồn gốc lớp Constructor Calls
- 24. Trình biên dịch Python cho ngôn ngữ đơn giản với thuật toán mã vm java
- 25. ColdFusion Java Đầu ra mã hóa khác nhau cho cùng một chuỗi với thuật toán AES
- 26. Các phương thức gốc trong Java
- 27. Nơi tìm mã nguồn cho các phương thức gốc java.lang?
- 28. Có trình biên dịch mã máy gốc cho JavaScript không?
- 29. Thuật toán xem đã giải mã cho CAD
Bạn có muốn một trình dịch ngược không? – EAKAE
Không, tôi đang tìm cách tạo phương pháp sin của riêng mình và tôi tin rằng cách thức hoạt động của lớp Math sẽ giúp ích gì. – user2089351