powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Деление вещественного числа
11 сообщений из 11, страница 1 из 1
Деление вещественного числа
    #38902123
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ожидал споткнуться об такую ерунду...
В общем провожу операцию деления:

Код: java
1.
2.
3.
4.
5.
6.
7.
public class TestDivision {
        public static void main(String[] args) {
                System.out.println(String.format("fraction: %f", 1.0*6 / 16));
                System.out.println(String.format("fraction: %f", 1.0*6 / 4*4));
                System.out.println(String.format("fraction: %f", 1.0*6 / 4*4.0));
        }
}



Я ожидаю, что во всех случаях результат будет одинаковым, поскольку операция умножения заявлена в качестве более приоритетной, чем деление. При этом умножение на 1.0, предположительно, должно преобразовать числитель к типу float, чтобы произошло именно деление с вещественным результатом, а не деление нацело. Но вот то получается на самом деле:

$ java TestDivision
fraction: 0,375000
fraction: 6,000000
fraction: 6,000000

Проверял как на OpenJDK 1.7, так и на Oracle JDK 1.7 (jdk-7-oracle-armhf). Почему так???
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38902141
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
public class TestDivision {
        public static void main(String[] args) {
                System.out.println(String.format("fraction: %f", 1.0*6 / 16));
                System.out.println(String.format("fraction: %f", 1.0*6 / 4*4));
                System.out.println(String.format("fraction: %f", 1.0*6 / (4*4)));
        }
}
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38902156
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterЯ ожидаю, что во всех случаях результат будет одинаковым, поскольку операция умножения заявлена в качестве более приоритетной, чем деление.

Кто это заявил? Умный мальчик Вовочка? Смотрю документацию:
Operators

Там показано, что у умножения и деления одинаковый приоритет.
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38902161
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если подробнее то здесь и здесь .
И приучитесь писать так, чтобы было - unambiguous, recommended
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38902163
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев, понятно. Начал забывать приоритет операций...
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38902164
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже в таких злачных местах
Крупными буквами пишут

Brackets
Order
Division
Multiplication
Addition
Subtraction


и мелкими оставляют приписку
Kingsley OsimeHowever, one should be careful to understand that these operators are in actuality grouped by classes of precedence, where division and multiplication have the same precedence
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38902314
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стыдно не знать printf. Этож целая эпоха...
Код: java
1.
2.
3.
4.
5.
6.
7.
public class TestDivision {
        public static void main(String[] args) {
                System.out.printf("fraction: %f \n", 1.0*6 / 16);
                System.out.printf("fraction: %f \n", 1.0*6 / 4*4);
                System.out.printf("fraction: %f \n", 1.0*6 / 4*4.0);
        }
}
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38904509
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, не стыдно. В ту эпоху я писал на Delphi. А позже от одного бывшего коллеги, который программировал DSP на C++, слышал, что printf - страшное зло, т.к. существенно изменяют тайминги выполнения элементов кода. Вот так и отложилось в памяти: printf == зло. =))
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38904529
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не гарантировано время любых операций ввода/вывода. Мне, например, приходилось видеть "Sector read error on drive C" в сочетании с, примерно, минутным ожиданием ошибки.
За что же именно printf-у такая немилость?
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38904612
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНе гарантировано время любых операций ввода/вывода. Мне, например, приходилось видеть "Sector read error on drive C" в сочетании с, примерно, минутным ожиданием ошибки.
За что же именно printf-у такая немилость?
Ну я так-то привык использовать logging frameworks. О том, что у sout есть что-то кроме println() - для этой мысли даже места в голове не было.
...
Рейтинг: 0 / 0
Деление вещественного числа
    #38904618
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywritermayton, не стыдно. В ту эпоху я писал на Delphi. А позже от одного бывшего коллеги, который программировал DSP на C++, слышал, что printf - страшное зло, т.к. существенно изменяют тайминги выполнения элементов кода. Вот так и отложилось в памяти: printf == зло. =))
printf может быть только злом когда вы считаете микросекунды. И я готов спорить что профилирование вашего ПО
выдаст 80% лагов совершенно в другом месте отличном от printf.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Деление вещественного числа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]