Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возведение в степень 
:(
    Опции темы
ivanABIch
Дата 13.2.2004, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.10.2003

Репутация: нет
Всего: нет



Здраствуйте

у меня есть простое арифмерическое выражение
Код

double sngPn           = 54;
double sngB            = 32;
double sngn            = 12;
double sngTemperatur   = 80;
 
double Virazenie = 14 * ((sngPn / sngB) ^ 0.25) * ((3000 / sngn) ^ 0.35) * (40 / (sngTemperatur - 20)) ^ 0.12;


проблема заключаеся в том что последнее выражение не работает, причина - ((sngPn / sngB) ^ 0.25) возведение в степень так не возможно сделать, почему не могу знать, хотя если я напишу просто 3.35^0.25, то всё заработает подскажите в чём моя ошибка.
Заранее спасибо.
PM MAIL   Вверх
Crot
Дата 13.2.2004, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 31.1.2004

Репутация: 1
Всего: 3



Не знаю, что у тебя за Ява.
У меня операция "^" означает поразрядный XOR.
Если хочешь возводить в степень, то почему бы тебе не создать такую функцию:
Код

public static double stepen (double osnovanie, double pokazatel) {
 return java.lang.Math.exp (pokazatel * java.lang.Math.log(osnovanie));
}

Твоё выражение преобразуется в такой вид:
stepen (14 * stepen (sngPn / sngB , 0.25) * stepen (3000 / sngn , 0.35) * (40 / (sngTemperatur - 20)) , 0.12);

Это сообщение отредактировал(а) Crot - 13.2.2004, 13:12
PM MAIL WWW ICQ   Вверх
ivanABIch
Дата 13.2.2004, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.10.2003

Репутация: нет
Всего: нет



Спасибо Crot, это то что мене было нужно, я просто програмирую в Паскале, и думал что возведениев степень подобно.
PM MAIL   Вверх
[xoodo]
Дата 14.2.2004, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 9.3.2003

Репутация: нет
Всего: 4



Зачем городить огород? Логарифмы всякие... Может, я чего не понимаю, и у меня Ява не такая (третий день ее учу), но
Math.pow(var_osnovanije, var_stepen);
работает изумительно.
PM   Вверх
Crot
Дата 14.2.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 31.1.2004

Репутация: 1
Всего: 3



гы smile.gif
не знал
PM MAIL WWW ICQ   Вверх
Unregistered
Дата 17.2.2004, 15:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А можно узнать, зачем на яве писать вычислительные программы? Чтобы работало медленнее?
  Вверх
AntonSaburov
Дата 17.2.2004, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
А можно узнать, зачем на яве писать вычислительные программы? Чтобы работало медленнее?

Ну мало ли чего вдруг потребовалось - может график какой начертить в аплете или ее чего. Понятно, что сложные вычислительные задачи на JAVA лечше не делать - дороговато smile.gif

Очень будем рады, если Вам станете нашим постоянным посетителем.
PM MAIL WWW ICQ   Вверх
Guest
Дата 18.2.2004, 12:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(AntonSaburov @ 17.2.2004, 16:48)
Цитата
А можно узнать, зачем на яве писать вычислительные программы? Чтобы работало медленнее?

Ну мало ли чего вдруг потребовалось - может график какой начертить в аплете или ее чего. Понятно, что сложные вычислительные задачи на JAVA лечше не делать - дороговато smile.gif

Очень будем рады, если Вам станете нашим постоянным посетителем.

Цитата

Ну мало ли чего вдруг потребовалось - может график какой начертить в аплете или ее чего.


Просто прикидываю, сколько будет исполняться pow на java. 1000 тактов?
Вообще, я бы посоветовал избегать вызов pow для вычисления степеней фиксированной степени. Например, для x^0.25 можно ипользовать sqrt(sqrt(x)), для других степеней использовать, например, метод Ньютона-Рафсона... Будет всегда быстрее, иногда значительно. Но это так, если нужна скорость...
  Вверх
AntonSaburov
Дата 18.2.2004, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
Просто прикидываю, сколько будет исполняться pow на java. 1000 тактов?

Вообщем-то разумно - бездумное использование JAVA не очень хорошо. В таких случаях если без JAVA никак надо посмотреть в сторону JNI и лепить такие процедурки на С/С++.
PM MAIL WWW ICQ   Вверх
Sardar
Дата 18.2.2004, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Цитата
Вообщем-то разумно - бездумное использование JAVA не очень хорошо. В таких случаях если без JAVA никак надо посмотреть в сторону JNI и лепить такие процедурки на С/С++.

По моему в Java все тригонометрические функции нативные с полной поддержкой со-процессора. Работает все быстро.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
AntonSaburov
Дата 18.2.2004, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
По моему в Java все тригонометрические функции нативные с полной поддержкой со-процессора. Работает все быстро.

Класс, так оно и есть - надо было просто глянуть в исходники smile.gif
А я что-то никогда не обращал внимания. Здорово, Sardar
PM MAIL WWW ICQ   Вверх
[xoodo]
Дата 18.2.2004, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 9.3.2003

Репутация: нет
Всего: 4



Хмм... Запутали 8) sqr()/sqrt() все-таки быстрее pow(), или как? Намного?

Как раз похожая задачка, график в апплете. Степени фиксированные. Например, x^3 логичнее считать как pow(x, 3) или sqr(x)*x?
PM   Вверх
DarkDS
Дата 19.2.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата
Хмм... Запутали 8) sqr()/sqrt() все-таки быстрее pow(), или как? Намного?

Как раз похожая задачка, график в апплете. Степени фиксированные. Например, x^3 логичнее считать как pow(x, 3) или sqr(x)*x?

x^3 через корень не посчитать smile.gif
То что было приведено в качестве примера (х^0.25 есть корень 4 степени из х, который можно высчитать как корень из корня) просто исключение, которое хорошо работает только на данном примере. То же самое что х^2 и x^3 быстрее вычислять как х*х и х*х*х а не через pow. Но когда степень может варьироватся в разных пределах, то лудше использовать как раз фун-ии степени.

Это сообщение отредактировал(а) DarkDS - 19.2.2004, 13:40
PM MAIL   Вверх
AntonSaburov
Дата 19.2.2004, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
Степени фиксированные. Например, x^3 логичнее считать как pow(x, 3) или sqr(x)*x?

Только что сделал тестик - возводил в степень 0.5 через sqrt, pow и вариант от Crot аж 10 млн. раз. Взял нечто среднее. Результаты само собой относительные, но где-то вот такие:
sqrt - 170 миллисекунд
pow - 11500 миллисекунд
Crot - 5200 миллисекунд

Код теста вот:
Код

import java.util.Calendar;

public class CheckPow
{
 public static long MAX = 10000000;
 public static void main(String[] args)
 {
   long f1 = Calendar.getInstance().getTimeInMillis();

   double x1=0;
   for(int i=0; i<CheckPow.MAX; i++) {
     x1=x1+Math.sqrt(i);
   }
   System.out.println(""+x1);
   long f2 = Calendar.getInstance().getTimeInMillis();
   System.out.println("SQRT:"+(f2-f1));

   double x2=0;
   for(int i=0; i<CheckPow.MAX; i++) {
     x2=x2+Math.pow(i, 0.5);
   }
   System.out.println(""+x2);
   long f3 = Calendar.getInstance().getTimeInMillis();
   System.out.println("POW:"+(f3-f2));

   double x3=0;
   for(int i=0; i<CheckPow.MAX; i++) {
     x3=x3+stepen(i, 0.5);
   }
   System.out.println(""+x3);
   long f4 = Calendar.getInstance().getTimeInMillis();
   System.out.println("CROT:"+(f4-f3));
 }

 public static double stepen (double osnovanie, double pokazatel)
 {
   return java.lang.Math.exp (pokazatel * java.lang.Math.log(osnovanie));
 }
}


PM MAIL WWW ICQ   Вверх
[xoodo]
Дата 19.2.2004, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 9.3.2003

Репутация: нет
Всего: 4



Цитата
x^3 через корень не посчитать

Согласен. Я наивно полагаю, что sqr() -- квдрат, sqrt() -- квадратный корень. Как в Паскале. Видимо, неправ.

AntonSaburov, все наглядно и понятно. Спасибо МНЕ за самый долгий из предложенных вариантов -- pow() smile.gif

Это сообщение отредактировал(а) [xoodo] - 19.2.2004, 21:16
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0907 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.