Исходники и листинги ::: Java ::: Дополнительные вещественные функции

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
  //Дополнительные вещественные функции
  public class EMath {
 
  //Элементарная функция сигнум (знак числа)
   public byte sgn(double x) {
   if (x < 0)return -1;
   if (x == 0)return 0;
   return 1;
   }
 
  /***Обратные тригонометрические функции***/
  //Арксинус
   public double arcsin(double x) {
   return arctan(x / Math.sqrt(1 - x * x)); //Через арктангенс
   }
 
  //Арккосинус
   public double arccos(double x) {
   return Math.PI / 2 - arcsin(x); //Через арксинус
   }
 
  //Арктангенс. Разложение в быстро сходящийся ряд Тейлора, используется возведение в целую степень
   public double arctan(double x) {
   if (Math.abs(x) == 1)return sgn(x) * Math.PI / 4;
   if (Math.abs(x) > 1)return sgn(x) * Math.PI / 2 - arctan(1 / x);
   double R = 0;
   for (int n = 0; n < 100; n++) R += pow( -1, n) * pow(x, 2 * n + 1) / (2 * n + 1);
   return R;
   }
 
  /***Степени и корни***/
  //Целая степень числа (по алгоритму быстрого возведения в степень)
   public double pow(double a, int b) {
   if (a == 0 && b == 0)return Double.NaN;
   if (b == 0)return 1;
   if (b == 1)return a;
   if (b == -1)return 1 / a;
   if (b < 0)return (1 / pow(a, -b));
   double R = 1;
   while (b != 0) {
   if (b % 2 != 0) R *= a;
   a *= a;
   b /= 2;
   }
   return R;
   }
 
  //Арифметический корень целой степени из числа методом рекуррентной последовательности (pos - знак после точки, на котором будет погрешность)
   public double root(double x, int y, int pos) {
   if (y == 0)return Double.NaN;
   if (x == 0)return 0;
   if (y == 1)return x;
   if (y == -1)return 1 / x;
   if (y < 0)return 1 / root(x, -y, pos);
   if (x > -1 && x < 1)return root(x * pow(10, y), y, pos) / 10;
   if (x < 0 && y % 2 == 0)return Double.NaN;
   double a = 1, an = 1;
   if (y > 99999)return Double.POSITIVE_INFINITY;
   for (int i = 0; i < 100; i++) {
   an = (double) (y - 1) / y * (a + x / ( (y - 1) * pow(a, y - 1)));
   if (toFixed(a, pos) == toFixed(an, pos))break;
   a = an;
   }
   return an;
   }
 
  //Логарифм без использования разложения в ряд (eps - погрешность)
   public double log(double x, double a, double eps) {
   if (a = eps || z = a) {
   if (z >= a) {
   z /= a;
   y += t;
   }
   else {
   if (z < = 1 / a) {
   z *= a;
   y -= t;
   }
   else {
   z *= z;
   t /= 2;
   }
   }
   }
   return y;
   }
   
  }
<<< Предыдущая работа

Вернуться в галерею исходников
Дополнительные вещественные функции
Автор: Mihail-Nor*
Город: Норильск
Дата: 17.11.2008  15:37
Комментариев: 3
Просмотров: 1979
Оценка: 0 (0|0|0|0|0) [0]

Вернуться на главную
Авторский комментарий к работе: Содержит специальные математические функции (арксинус, арккосинус, арктангенс, степень, корень, логарифм), написанные только с использованием стандартных операций +, -, *, /, остаток от деления. В некоторых редакциях языков программирования эти функции могут отсутствовать в стандартном наборе.
Работа опубликована администратором Sauron
Вы не можете оценивать

КОММЕНТАРИИ К РАБОТЕ:
Mihail-Nor* ::: комментарий от 19.11.2008 | 17:27
Mihail-Nor Сведущий (ур.9)
Очки: 2243
Город: Норильск
Тв. работ: 10
Рег: 01.09.2008 (8097)
Ответ для Kane 18.11.2008 | 09:59:

А это на языке Java 2 (Micro Edition). На C++ похоже, но язык совсем другой...


--------------------
Всё ещё будет...
Kane* ::: комментарий от 18.11.2008 | 09:59
Kane Перспективный (ур.8)
Очки: 1556
Город: Якутск
Тв. работ: 9
Рег: 09.10.2008 (8737)
Это что на JAVE писали? Что то больно С++ напоминает. или у JAVA и С похожий язык? Mihail-Nor подскажи, на всякий пожарный!


--------------------
Все что хорошо начинается кончается плохо. А что плохо начинается кончается еще хуже.
Mihail-Nor* ::: комментарий от 17.11.2008 | 16:03
Mihail-Nor Сведущий (ур.9)
Очки: 2243
Город: Норильск
Тв. работ: 10
Рег: 01.09.2008 (8097)
Этот код может быть использован для создания программ для мобильных устройств. В этом языке (Java2ME) данных функций нет вообще.

Если кто-нибудь знает быструю функцию (на любом языке, только на стандартных операциях), возводящую вещественное число в вещественную же степень, пожалуйста, сообщите...


--------------------
Всё ещё будет...