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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> длинные числа double 
:(
    Опции темы
Danzan
Дата 2.7.2011, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет. Делаю класс для систем счисления. Столкнулся с проблемой:
Код

double d=1001100011101000100111111010101100101001111.00000001; //как пример(с потолка)


при дебаге вижу следующее:

d=1.0011000111010001E42

есть вариант как работать с такими длинными дробями, чтоб основание не выводило? или лучшим вариантом будет сделать погрешность вычислений укоротив число и как это правильно реализовать на яве?

Благодарю smile
PM MAIL   Вверх
newbieone
Дата 2.7.2011, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если пример действительно с потолка и вам нужно только, чтоб число выводилось в другой форме, есть класс Formatter из java.util.
Код

double d=1001100011101000100111111010101100101001111.00000001;
print(d); // вывели в записи с 10 to the power
Formatter f = new Formatter(); // создали объект класса
f.format("%f",d); // задали формат вывода: %f - десятичное значение с плавающей точкой
print(f); // вывели в привычном виде

Вывод:
Код

1.0011000111010001E42 // 10 to the power
1001100011101000100000000000000000000000000,000000

Да, а то, что исходное число и его вывод на экран (в обоих формах записи) не совпадают, вас не смущает?

Это сообщение отредактировал(а) newbieone - 2.7.2011, 10:54
PM MAIL   Вверх
Danzan
Дата 2.7.2011, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Блин smile не понимаю, пробовал AFFFFFFFADDDDFFFF.AFFDFFFFDFFFFFEEFFFF перевести в двоичную, у меня на какомто этапе умирает с ошибкой:
java.lang.NumberFormatException: For input string: "0291418478875758E20". А если в десятичную ответ выдает "2.0291418478875758E20"

пробовал на калькуляторе онлайн(калькулятор), решил как положено... как он справляется с такими длинными числами? посоветуйте вариант решения. Есть вариант как отловить это явление глбально? а не правит в каждой строчке кода, тк это чудо появляется и в ответе и на пути решения(возведение в степень итп) и приращивать костыль к каждой строке както не правильно...
PM MAIL   Вверх
Stolzen
Дата 2.7.2011, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Используйте BigDecimal


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Danzan
Дата 3.7.2011, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо Stolzen smile как раз зашел отписаться что bigdecimal все решил и тут ваш ответ в тему.

BigDecimal поломал слегка мозг своей нестандартной арифметикой. Пока прикрутил как костыль, скорость работы упала в разы, нужно будет вылизывать код.
PM MAIL   Вверх
newbieone
Дата 3.7.2011, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Danzan, а как вы шестнадцатеричные дроби из своих постов в BigDecimal загоняли? 
Цитата
AFFFFFFFADDDDFFFF.AFFDFFFFDFFFFFEEFFFF


Это сообщение отредактировал(а) newbieone - 3.7.2011, 10:41
PM MAIL   Вверх
Danzan
Дата 3.7.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(newbieone @ 3.7.2011,  10:41)
Danzan, а как вы шестнадцатеричные дроби из своих постов в BigDecimal загоняли? 
Цитата
AFFFFFFFADDDDFFFF.AFFDFFFFDFFFFFEEFFFF

никак, это класс для перевода в разные системы счисления, AFFFF.DFFFF как строка, дальше манипуляции с переводом и ответ в bigdecimal
PM MAIL   Вверх
Stolzen
Дата 3.7.2011, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Danzan, Он долго работает, и при каждой операции создается новый объект - отсюда потеря скорости. 
Для прироста скорости можно переписать BigDecimal под себя так, чтобы он был mutable. Это не составит большого труда (я когда-то переписывал, но у меня код не сохранился).

Еще можно посмотреть этот вопрос на форумах по спортивному программированию, там может получится найти готовую реализацию. 


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

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

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


 




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


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

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