Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Guitar_goo
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 9
#1

Оценка производительности - Программирование Android

18.04.2014, 09:32. Просмотров 613. Ответов 8
Метки нет (Все метки)

Здравствуйте, есть простой довольно вопрос, но ответа на него никак не могу найти.
В общем пытались мы тут оценить производительность java на приложении для Андроида. Написали элементарнейший совершенно цикл:
Java
1
2
3
4
5
6
7
8
9
10
11
float q = 1.2;
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++)
{
for (int k = 0; k < 1000; k++)
{
q=3.8*q*(1-q);
}
}
}
Запускаю такой цикл в отдельном потоке, но через 5-6 секунд приложение просто вылетает. Пробовал это делать на нескольких планшетах с разной производительностью, но результат все равно один и тот же всегда. Так вот, интересует почему программа вылетает? Предполагаю, что переполняется кэш, но здесь вроде нет ничего особенного и совсем уж ёмкого в плане вычислений. Подскажите, в чем проблема пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 09:32     Оценка производительности
Посмотрите здесь:

Оценка функционала LEO Privacy Guard - Программирование Android
Планирую использовать програму в заголовке. Может кто пользовался расскажите про опыт использования Заранее спасибо

Оценка стоимости разработки мобильного приложения - Программирование Android
Здравствуйте, рассматриваю разработку мобильного приложения на ОС Android. Если здесь есть разработчики, то прошу приблизительно оценить...

Отправка данных с планшета на удаленный компьютер. оптимизация производительности планшета - Программирование Android
Всем здравствуйте. В общем, задача такая. Имеется приложение для планшета, собирающее данные с некоего прибора по блютусу, а конкретно, оно...

Оценка производительности - Алгоритмы
Вообщем, ситуация следующая : хотел организовать что-то вроде профайлера. В классе задаются методы для теста, и проводятся некие...

Оценка производительности программ - C (СИ)
Как оценивать производительность программы? Например, время выполнения конкретного участка кода. С помощью специальных средств?

Оценка производительности системы - Windows 7
Здравствуйте! Мой компьютер Phenom II X4 965 (3.4 GHz), 4GB, GTX550 Ti (1024), 1Tb, DVD±RW, CR. Установлено: Win XP и Win 7 Вопрос:...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
glnix
14 / 14 / 5
Регистрация: 08.04.2013
Сообщений: 75
18.04.2014, 09:55     Оценка производительности #2
Предположу что на k итерации q выходит за пределы диапазона типа?
Double не хватит, тем более float.
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
18.04.2014, 10:49     Оценка производительности #3
Цитата Сообщение от Guitar_goo Посмотреть сообщение
Подскажите, в чем проблема пожалуйста
Покажите логи, без них сложновато понять где крэш случился
Guitar_goo
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 9
18.04.2014, 12:22  [ТС]     Оценка производительности #4
нет. переполнения типа здесь однозначно нет. это простая рекурентная формула, сходящийся ряд. он стремится к определенному числу

Добавлено через 16 минут
логи не писал к сожаления. надо попробовать. Просто тестирую программу на реальном планшете, а не виртуальном устройстве. Надо попробовать.
Могу сказать только, что цикл работает, только когда в сумме примерно 100000 итераций, если больше - вылетает
запишу лог - покажу что там

Да, программирую в эклипсе, если это может иметь значение
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 229
18.04.2014, 12:41     Оценка производительности #5
Цитата Сообщение от Guitar_goo Посмотреть сообщение
логи не писал к сожаления.
Так и не надо. Если случился exception, то в logcat он будет зарегистрирован.
glnix
14 / 14 / 5
Регистрация: 08.04.2013
Сообщений: 75
18.04.2014, 14:35     Оценка производительности #6
Даже для такого кода
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
public class ThreadTest {
    public static void main(String[] args) throws InterruptedException {
        System.out.println(Thread.currentThread().getName() + " thread started.");
        Thread mt = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Working...");
                Double q = 1.2;
                for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        for (int k = 0; k <10; k++)
                        {
                            q=3.8*q*(1-q);
                            System.out.println(q);
                        }
                    }
                }
                System.out.println(Thread.currentThread().getName() + " is terminated.");
            }
        });
        mt.start();
        mt.join();
        System.out.println(Thread.currentThread().getName() + " thread ending.");
    }
}
Кликните здесь для просмотра всего текста
main thread started.
Working...
-0.9119999999999997
-6.626227199999997
-192.02583360287522
-140850.5970970316
-7.53883199021122E10
-2.159691535540666E22
-1.77242166090068E45
-1.1937618467313718E91
-5.415255917503682E182
-Infinity
-Infinity
-Infinity
//и так далее
Thread-0 is terminated.
main thread ending.


Т.е. переменная уходит в некую бесконечность.
Погуглил, выходит что q в определенный момент становится равной Double.NEGATIVE_INIFINITY, которая равна -1.0/0.0
Т.е. для деления int на 0 мы имеем ArithmeticExeption, а для Double вот такую константу.

PS
IDEA float подчеркивает, предлагает менять на double.
Или я чего не так понял... =]
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
18.04.2014, 14:36     Оценка производительности #7
Я бы в логкэт вывел значения...
Примерно так:
q=3.8*q*(1-q); Log.i("LOGCAT", ""+q);
Можно будет увидеть куда убегает число...
одно из двух - либо слишком большое и происходит переполнение (не уверен что будет ошибка). либо =0 и происходит деление на ноль...
Guitar_goo
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 9
18.04.2014, 15:39  [ТС]     Оценка производительности #8
эмм... но ведь в формуле не используется деление...
Я думаю проблема все же не в математике, а в каких-то не совсем явных особенностях исполнения кода, либо распределения памяти
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2014, 20:38     Оценка производительности
Еще ссылки по теме:

Оценка производительности - непонятно - Материнские платы
может кому знакомо мать ASUS M5A97, проц Athlon II 240, память 4Gb samsung 1333 которая легко 1600 (1600 и есть) в винде оценка: проц 6,8...

Оценка совместимости и производительности - Игровой компьютер
Доброго времени суток. Долгое время обходился без стационарника, а тут спустя многие годы решил собрать себе что то игровое, чтобы...

оценка производительности алгоритма - Java SE
пожскажите, как можно оценить производительность написанных алгоритмов??? я пытался получить время выполнения определенного участка кода,...

Оценка сборки ПК (по производительности) - Офисный компьютер
Бюджет был ограниченный, собрал комп за 15 не включая Корпуса и привода. Процессор: AMD FX6100 3.3ГГц - 3 430р Мат-плата: ASUS...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
glnix
14 / 14 / 5
Регистрация: 08.04.2013
Сообщений: 75
18.04.2014, 20:38     Оценка производительности #9
Пустой цикл выполнится без ошибок?

Добавлено через 3 часа 55 минут
Ну так... все верно же.
-0.9119999999999997
-6.626227199999997
-192.02583360287522
-140850.5970970316
-7.53883199021122E10
-2.159691535540666E22
-1.77242166090068E45
-1.1937618467313718E91
-5.415255917503682E182
E182 и конец.
Переполнение.
Yandex
Объявления
18.04.2014, 20:38     Оценка производительности
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru