Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
14 / 0 / 1
Регистрация: 14.07.2011
Сообщений: 51
1

Неправильный результат умножения

25.03.2012, 19:14. Показов 2904. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток господа.
Работая в Eclipse SDK Version: 3.7.0 при попытке умножить 1.1 на (-0.1) получаю -0.11000000000000001
Тип double.
То же самое с float: -0.11000001
Так как мне нужна соответствующая точность, эти результаты меня не радуют.
Возможно, кто-то поможет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2012, 19:14
Ответы с готовыми решениями:

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

Даны числа от 1 до 1000 и число m; вывести результат умножения куба нечетных сотен на число m
Здравствуйте! Даны числа от 1 до 1000 и число m; вывести результат умножения куба нечетных сотен на...

Знак умножения, неправильный вывод
файлик ниже предоставил. не могу понять, почему $assa= round( ($sum / $sonfig_site), 2);...

Неправильный результат
1)В результате выдаёт -1.#J. Как это исправить? 2)Подскажите пожалуйста как задавать число пи, мне...

10
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
25.03.2012, 21:11 2
таким образом можно получить локализированный формат, или
свой создать
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
package format;
 
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.MessageFormat;
import java.text.NumberFormat;
 
/**
 *
 * @author mutagen
 */
public class UseFormat {
 
    public static void main(String[] args) {
        MessageFormat mf = new MessageFormat("{0,number,#.##}");
        Double[] objs = {new Double(3.1415)};
        String result = mf.format(objs);
        System.out.println(result);
        // и самопальный
        DecimalFormat f = new DecimalFormat("#.##");
        DecimalFormatSymbols ds = new DecimalFormatSymbols();
        ds.setDecimalSeparator('.');
        f.setDecimalFormatSymbols(ds);
        result = f.format(new Double(3.1415));
        System.out.println(result);
 
    }
}
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
26.03.2012, 07:33 3
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
Доброго времени суток господа.
Работая в Eclipse SDK Version: 3.7.0 при попытке умножить 1.1 на (-0.1) получаю -0.11000000000000001
Тип double.
То же самое с float: -0.11000001
Так как мне нужна соответствующая точность, эти результаты меня не радуют.
Возможно, кто-то поможет?
Типы с плавающей точкой - плохой выбор, если нужны точные вычисления.
Стоит обратить внимание на тип с фиксированной запятой - BigDecimal, или использовать тип-дробь BigFraction
0
14 / 0 / 1
Регистрация: 14.07.2011
Сообщений: 51
26.03.2012, 22:23  [ТС] 4
И все же ... Разве Оракл не обращает на это внимание? И скорее всего им это известно .. Хотя кто знает
Решил я эту проблему по-своему, изменил коэффициент и все стало на свои места. Так что могу пожелать быть осторожным =)
0
20 / 20 / 3
Регистрация: 13.07.2011
Сообщений: 73
26.03.2012, 22:35 5
В книгах, да именно в тех разделах, которые программисты пропускают как простые, как раз и рассказывают про неточность типов float и double.

Кому интересна причина, так это в особенности записи числа с плавающей точной с отрицательным знаком (и не только с отрицательным). Когда двоичное число "делают" отрицательным, его инвертируют и добавляют единицу. То есть, там в младших разрядах остается что-то, вот оно и при выводе округляется и получается 1. С числами, что ближе к 0, вероятность такого велика.
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
27.03.2012, 08:59 6
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
И все же ... Разве Оракл не обращает на это внимание? И скорее всего им это известно .. Хотя кто знает
Решил я эту проблему по-своему, изменил коэффициент и все стало на свои места. Так что могу пожелать быть осторожным =)
Конечно обращают, для этого и делали типы с фиксированной запятой. А операции с плавающей запятой стандартизованы и используются во всех современных языках одинаково.
0
aleksandy
27.03.2012, 10:23
  #7

Не по теме:

Удивляет меня поразительная частота возникновения подобных вопросов. Неужели сложно по форуму поискать? Может админам надо создать и закрепить какую-нибудь тему типа FAQ?

0
14 / 0 / 1
Регистрация: 14.07.2011
Сообщений: 51
10.04.2012, 01:00  [ТС] 8
Цитата Сообщение от aleksandy Посмотреть сообщение

Не по теме:

Удивляет меня поразительная частота возникновения подобных вопросов. Неужели сложно по форуму поискать? Может админам надо создать и закрепить какую-нибудь тему типа FAQ?

Кстати искал, по даному разделу, но ничего толком не нашел.

Добавлено через 1 минуту
Цитата Сообщение от turbanoff Посмотреть сообщение
Конечно обращают, для этого и делали типы с фиксированной запятой. А операции с плавающей запятой стандартизованы и используются во всех современных языках одинаково.
Да ,но я такой ошибки не заметил на с/с++, где я тоже проверял код
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
10.04.2012, 01:11 9
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
Да ,но я такой ошибки не заметил на с/с++, где я тоже проверял код
это утверждение тоже повторяют с такой же частотой, не читавшие документацию по C++ и java, думая что если printf чёт там делает за них, то они понимают что происходит

и это не ошибка, это так работает вычисление во всех языках программирования

поддерживаю aleksandy, надо уже прилеплять вверху темку для FAQ и дать доступ туда писать, alexandy, turbanoff, MK{цыфры}, Золотцу, Скипи.

возможно кто предложит и меня
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
10.04.2012, 12:07 10
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
И все же ... Разве Оракл не обращает на это внимание? И скорее всего им это известно ..
Это известно не только им. Это известно также разработчикам процессоров, компиляторов, программного обеспечения и вообще всем, кто знает, что такое вычисления с плавающей точкой, как представляются такие числа в памяти и что из этого следует. Всё это, собственно, является следствием неукоснительного соблюдения стандарта IEEE754: http://en.wikipedia.org/wiki/IEEE_754-2008
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
10.04.2012, 14:00 11
вот и Скипи попал в инфинити луп по поводу плавающей точки С++ versus Java )))
я уже раз 5 итераций в нём )))
0
10.04.2012, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2012, 14:00
Помогаю со студенческими работами здесь

Неправильный результат
где тут ошибка #include<conio.h> #include<iostream.h> #include<math.h> #include<iomanip.h> ...

Неправильный результат base64_encode
Приветствую всех. Столкнулся с сабжем - простейший скрипт вида <?php $str = 'Строка в...

Выводит неправильный результат
Нужно преобразовать вектор А в вектор В таким образом, чтобы каждый элемент вектора В состоял из...

Неправильный результат char
Здраствуйте, есть клиент сервер. От клиента идет строка LOGIN_PASS:555|555 сервер принимает и...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru