Java MyDouble Арифметические операции — Задачи
Отправленные решения: 165
Засчитанные решения: 98
Количество пользователей отправивших решение: 106
Количество пользователей решивших задачу: 95
Сложность: 10%
Сложность задачи определяется по соотношению количества пользователей, правильно решивших задачу, к количеству пользователей, отправивших решение по задаче.
# | Пользователь | Время отправки | Время | Память | Язык |
---|---|---|---|---|---|
12104317 | schizophrenia | 10 нояб. 2022 г., 10:45:48 | 1 ms | 72 KB | C 17 (gnu 10.2) |
6909830 | condor | 13 апр. 2020 г., 00:18:14 | 1 ms | 196 KB | Pascal (fpc 3. 2) |
7013724 | tet1980 | 6 мая 2020 г., 22:17:53 | 1 ms | 196 KB | Pascal (fpc 3.2) |
6913926 | RAS_QAS | 13 апр. 2020 г., 21:12:04 | 1 ms | 200 KB | Pascal (fpc 3.2) |
6914498 | dvs | 13 апр. 2020 г., 23:40:44 | 1 ms | 200 KB | Pascal (fpc 3.2) |
6917043 | wassa | 14 апр. 2020 г., 18:17:13 | 1 ms | 200 KB | Pascal (fpc 3. 2) |
10976875 | Sedrik | 2 мая 2022 г., 12:51:33 | 1 ms | 204 KB | Pascal (fpc 3.2) |
12342593 | fixtengolc1 | 1 дек. 2022 г., 18:49:46 | 1 ms | 208 KB | Pascal (fpc 3.2) |
6915782 | vasil1234568 | 14 апр. 2020 г., 12:54:49 | 2 ms | 200 KB | Pascal (fpc 3.2) |
6970242 | vvp | 25 апр. 2020 г., 08:07:12 | 1 ms | 540 KB | C++ 11 (gnu 10. 2) |
10798889 | kolomiichuk. | 1 апр. 2022 г., 10:06:24 | 1 ms | 584 KB | C++ 17 (gnu 10.2) |
10568057 | OtarMurmanishvili | 23 февр. 2022 г., 01:13:21 | 1 ms | 588 KB | C++ 17 (gnu 10.2) |
11038544 | yunisisayev | 11 мая 2022 г., 21:43:44 | 1 ms | 588 KB | C++ 17 (gnu 10.2) |
11055686 | OqtayLoghlu | 14 мая 2022 г., 20:18:17 | 1 ms | 588 KB | C++ 17 (gnu 10. 2) |
11071751 | YaverKazimof | 17 мая 2022 г., 16:43:29 | 1 ms | 588 KB | C++ 17 (gnu 10.2) |
12096680 | ilahealgayeva | 9 нояб. 2022 г., 16:49:50 | 1 ms | 588 KB | C++ 17 (gnu 10.2) |
12199461 | IAMSHADOW | 17 нояб. 2022 г., 21:39:31 | 1 ms | 588 KB | C++ 17 (gnu 10.2) |
12203455 | RehmanCalabi | 18 нояб. 2022 г., 11:35:30 | 1 ms | 588 KB | C++ 11 (gnu 10. 2) |
12291254 | Ali.qurbanov00 | 26 нояб. 2022 г., 13:21:16 | 1 ms | 588 KB | C++ 17 (gnu 10.2) |
12661489 | Onurr | 15 янв. 2023 г., 19:29:37 | 1 ms | 588 KB | C++ 11 (gnu 10.2) |
12661644 | akhundzade_21 | 15 янв. 2023 г., 19:48:47 | 1 ms | 588 KB | C++ 11 (gnu 10.2) |
12680224 | hricane | 18 янв. 2023 г., 12:25:42 | 1 ms | 588 KB | C++ 17 (gnu 10. 2) |
10139363 | sabuhiabs | 16 дек. 2021 г., 00:26:42 | 1 ms | 592 KB | C++ 17 (gnu 10.2) |
12579985 | Mehdi313 | 31 дек. 2022 г., 17:04:46 | 1 ms | 592 KB | C++ 17 (gnu 10.2) |
10139346 | sabuhiabbas | 16 дек. 2021 г., 00:21:59 | 1 ms | 604 KB | C++ 17 (gnu 10.2) |
Pro Java: Примитивные вещественные типы Java
Тип | Содержит | По умолчанию | Размер | Диапазон | Обертки |
float | вещественное знаковое | 0. 0 | 32 bits | от 1.4E−45 до 3.4028235E+38 | Float |
double | вещественное знаковое | 0.0 | 64 bits | от 4.9E−324 до 1.7976931348623157E+308 | Double |
Вещественные числа в Java представлены типами данных float и double. Как показано в таблицах выше, float является 32 битным значением с плавающей точкой, с обычной точностью, а double представляет 64 битное значение с плавающей точкой, с двойной точностью. Количество бит отведенные под представление этих чисел смотрите в таблице выше. Оба типа соответствуют стандарту IEEE 754-1985, который определяет формат чисел и арифметические операции, применимые к этим числам. Но есть и небольшие отличия от этого стандарта. К обычным вещественным числам добавляются еще четыре значения:
- положительная бесконечность, выражаемая константой POSITIVE_INFINITY и возникающая при переполнении положительного значения, например в результате операции умножения 3. 0*6e307 или при делении на нуль;
- отрицательная бесконечность NEGATIVE_INFINITY, возникающая при переполнении отрицательного значения, например в результате операции умножения -3.0*6e307 или при делении на нуль отрицательного числа;
- «не число», записываемое константой NaN (Not a Number) и возникающее, например, при умножении нуля на бесконечность.
- кроме того, стандарт различает положительный и отрицательный нуль, возникающий при делении на бесконечность соответствующего знака, хотя сравнение 0.0 == -0.0 дает в результате истину, true.
Операции с бесконечностями выполняются по обычным математическим правилам. Во всем остальном вещественные типы — это обычные вещественные значения, к которым применимы все арифметические операции и операции сравнения.
Вещественные литералы
Значения с плавающей точкой можно непосредственно включать в Java программу. В такой величине за необязательной последовательностью цифр следует десятичная точка и другая последовательность цифр. Ниже представлены несколько примеров:
123.45
0.0
.01
5.
Литералы с плавающей точкой можно также представить в экспоненциальной, или научной, нотации, в которой за числом следует буква e или E (показатель степени) и другое число. Второе число представляет степень десятки, на которую умножается первое число. Если же число записано в шестнадцатеричном формате, то экспонента это степень двойки. Например:
1.2345E02 // 1.2345 × 102, или 123.45
1e-6 // 1 × 10-6, или 0.000001
6.02e23 // Число Авогадро: 6.02 × 1023
Так же с Java 6, возможно записывать в шестнадцатеричном формате:
0xFp2 // 15×22=60
Литералы с плавающей точкой по умолчанию являются значениями типа double. При включении значения типа float в программу за числом следует поставить символ f или F:
double d = 6. 02E23;
float f = 6.02e23f;
В принципе литералы типа double можно тоже обозначать суффиксом d или D, но это особо не имеет смысла, так как вещественные литералы всегда по умолчанию double.
Большинство вещественных чисел, по самой их природе, нельзя точно представить каким-либо конечным количеством битов. Таким образом, необходимо помнить, что значения float и double являются только приближенными значениями представляемых ими чисел. float – это 32 битное приближение, которое дает как минимум 6 значимых десятичных разрядов, а double – это 64 битное приближение, которое представляет по крайней мере 15 значимых десятичных разрядов. На практике эти числа подходят для большинства вычислений с вещественными числами.
Поскольку типы с плавающей точкой в Java могут сводить переполнение к бесконечности, антипереполнение – к нулю, а также имеют особое NaN значение, то арифметические операции с плавающей точкой никогда не генерируют исключений, даже при выполнении недопустимых операций, например при делении нуля на нуль либо при вычислении корня отрицательного числа.
Бесконечные значения с плавающей точкой ведут себя вполне логично. Например, прибавление к бесконечности или вычитание из нее любого конечного значения дает бесконечность. Поведение отрицательного нуля почти не отличается от положитель ного нуля; фактически оператор равенства == сообщает о равенстве отрицательного и положительного нуля. Единственный способ отличить отрицательный нуль от по ложительного или обычного нуля – разделить на него какоелибо число. 1.0/0.0 дает положительную бесконечность, а деление 1.0 на отрицательный нуль дает отрицательную бесконечность. И наконец, поскольку NaN не является числом, оператор == сообщает, что это значение не равно ни одному другому числу, включая само значение! Чтобы проверить, являются ли значения float и double нечисловыми (NaN), следует вызвать методы Float.isNaN() и Double.isNaN().
Арифметические операции
Поскольку к вещественным типам применимы все арифметические операции и сравнения, целые и вещественные значения можно смешивать в операциях. При этом правило приведения типов дополняется такими условиями:
если в операции один операнд имеет тип double, то и другой приводится к типу double;
иначе, если один операнд имеет тип float, то и другой приводится к типу float;
в противном случае действует правило приведения целых значений.
Побитовые операции с вещественными типами не поддерживаются.
Операция деление по модулю (или остаток) определяется так же как и для целочисленных типов:
a % b = a — (a / b) * b
Так же для операции деления по модулю справедливо следующее выражение:
a = ((long)(a/b))*b+(a%b)
Вычисления чисел с плавающей точкой на одном и том же, а тем более на разных процессорах могут давать несколько разные результаты, поскольку виртуальная машина java выполняет эти операции на сопроцессоре (FPU), если он присутствует на устройстве. А в сопроцессоре обычно регистры для работы с плавающей точкой 80 бит, что шире даже чем double. Поэтому, если в эти регистры положить числа double, а потом опять вернуть их в double, то результаты могут быть разные для одинаковых чисел, по умолчанию java эту проблему не решает, то есть нет гарантии, что написанный код работающий с целочисленными типами будет давать одинаковый результат на разных процессорах. Это сделано потому, что желательно использовать сопроцессор для скорости вычислений. Результаты в этом случае могут немного различаться.
Чтобы результаты были на всех процессорах одинаковые, то следует использовать ключевое слово strictfp в декларации метода, например:
public static strictfp void main(String[] args)
В данном случае все что будет происходить в методе main, будет происходить без участия сопроцессора, будет строго округляться в пределах 64 бит и результат будет одинаковым на разных процессорах.
Все математические функции из библиотеки java.lang.Math работают с числами типа double.
Ну и теперь немного практики:
И вывод этой программы:
Арифметические операторы и операторы присваивания, объясняемые в Java
Арифметические операторы позволяют выполнять алгебраические арифметические действия в программировании.
То есть они позволяют складывать, вычитать, делить и умножать числа.В этой статье также рассматриваются операторы присваивания. Они позволяют вам присвоить (присвоить) определенное значение переменной.
Это руководство предназначено не только для программистов Java. Многие другие языки программирования, такие как C и Python, используют те же операторы. Поэтому вы можете легко перенести и применить полученные здесь знания.
Арифметические операторы
В Java существует 5 арифметических операторов — в таблице ниже они перечислены.
Operator Name | Symbol | Sample Expression |
---|---|---|
Addition | + | x+3 |
Subtraction | — | y-8 |
Multiplication | * | x*y |
Division | / | x/2 |
Remainder | % | y%3 |
Символы ( + , — , /) должны показаться знакомыми. Это потому, что они такие же, как те, которые обычно используются в алгебре.
Важно отметить, что оператор деления ( / ) здесь относится к целочисленному делению. То есть 19/5 будет оцениваться как 3 . Любая дробная часть, полученная в результате этого вычисления, усекается.
Связанный: Что такое конструктор в Java и как вы его используете?
Вы также должны были заметить, что оператор Java для умножения — это звездочка ( * ), а не обычный символ умножения ( × ).
Чтобы получить модуль двух целых чисел, Java использует символ % . Пример, приведенный в таблице, подобен алгебраическому выражению: y mod 3 . Оператор % дает остаток после деления y на 3 . То есть 19%5 будет оцениваться как 4 .
Рекомендуется использовать круглые скобки для группировки подвыражений. Это облегчает читаемость и помогает избежать логических и синтаксических ошибок.
( 4*y+(z/3)) // пример
При наличии нескольких арифметических операторов в одном выражении Java использует правила приоритета операторов, чтобы определить, какие подвыражения следует вычислять первыми.
В таблице ниже классифицированы уровни приоритета операторов.
Прецедент | Оператор | Описание | |||||||
---|---|---|---|---|---|---|---|---|---|
1 | 9002 * / % | 10003 | 9002 * / % | 10003 | 9002 * / % | 10003 | 9002 * / % | 0003 | Умножение, деление и модуль имеют одинаковый уровень приоритета. Если используется несколько операторов этого типа, они оцениваются слева направо. |
2 | + — | Сложение и вычитание имеют одинаковый уровень приоритета. Если используется несколько операторов этого типа, они оцениваются слева направо. | |||||||
3 | = | Этот оператор вычисляется последним. |
Операторы ( * , / , % ) имеют наивысший уровень приоритета, затем следуют ( + , — , наконец, 1 и 0). Операторы ( * , / , % ) и ( + , — ) связаны слева направо. Это просто означает, что их оценка начинается с самого левого оператора.
Третий оператор ( = ) связывает справа налево. Таким образом, если x=3 , это означает, что 3 присваивается x , а не x присваивается 3.
Оператор присваивания ( = ) присваивает значение переменной.
у = у+7;
Приведенное выше выражение добавляет 7 к y и затем присваивает окончательный результат y . Если вы новичок в программировании, это выражение может показаться немного странным. Это не должно вас беспокоить, поскольку компилятор поймет, что вы пытаетесь сделать.
Составное присваивание
Вы можете упростить способ выражения присваивания, используя составной оператор присваивания.
В предыдущем примере мы могли просто написать:
y+=7;
В таблице ниже показано, как можно использовать составные операторы присваивания.
Составной оператор | Пример выражения | Расширенная форма | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
x+=2 | x=x+2 | |
-= | y -=6 | y=y-6 |
*= | z *=7 | z=z*7 |
/= | a /=4 | a=a/4 |
%= | б %=9 | b= b%9 |
Операторы увеличения и уменьшения
Если у вас есть составное присваивание +=1 , вы можете просто записать его как ++ . Это известно как «оператор приращения». Точно так же оператор декремента — .
Связано: Как написать цикл for в Java
При использовании перед операндом операторы инкремента и декремента известны как «операторы префикса». И когда они используются после операнда, они называются «постфиксными операторами».
С префиксом переменная, с которой выполняется операция, сначала изменяется, а затем используется, а с постфиксом используется начальное значение до модификации.
у++; //постфикс, наиболее предпочтительная форма многими программистами
++y; // префикс
Как правило, операторы постфикса и префикса дают один и тот же ответ. Ответ может измениться только при работе с большими выражениями.
Заставьте операторы работать на вас
Важно отметить, что операторы увеличения и уменьшения действуют только на переменные (например, x++ ), а не прямые значения (но не 5++ ). Вы также не должны оставлять никаких пробелов при использовании операторов инкремента и декремента, в отличие от операторов до этого. Это приведет к ошибке времени компиляции.
По возможности всегда используйте круглые скобки для логической группировки выражений. Это позволит избежать ненужных логических ошибок.
Имея под рукой эти операторы, понять, как использовать модификаторы доступа в Java, не составит труда.
Программирование на Java: арифметические и логические операции — Java SE 13 — ПРОМЕЖУТОЧНЫЙ
Ява SE 13 | Средний
- 9 видео | 1ч 5м 10с
- Включает оценку
- Получает значок
Этот курс из 9 видео исследует семантику логических и арифметических операторов в Java и то, как они используются для управления операндами. Курс демонстрирует, как небольшое изменение в выражении может привести к значительным изменениям в выводе. Рекомендуемым предварительным условием для этого курса является знание примитивных данных и типов объектов в Java. В этом курсе вы узнаете о важности разработки выражения для соответствия приложениям проекта, поскольку в Java по умолчанию используется значение false. Логические операторы — это логические операторы, операторы сравнения и использование круглых скобок. Участники увидят примеры булевых логических операторов, операторов сравнения и арифметических операторов. Вы научитесь использовать встроенные в Java короткие операторы сложения и вычитания для выполнения математических операций, а также узнаете, как скобки используются для изменения арифметических выражений. Курс также охватывает использование унарного оператора для получения одного операнда/аргумента и выполнения операции. Наконец, курс демонстрирует применение пре- и постинкремента и декремента при использовании унарного оператора.
ЧТО ВЫ УЗНАЕТЕоткройте для себя ключевые понятия, изучаемые в этом курсе
описывают правила логической арифметики и реализуют их в Java
реализовать операции сравнения с использованием примитивных типов
использовать логическое И, логическое ИЛИ и логическое отрицание
использовать круглые скобки для изменения порядка выполнения в арифметических и логических выражениях
определить варианты использования унарных операторов увеличения и уменьшения
отладка сложных конструкций, построенных с использованием унарных операторов увеличения и уменьшения
выполнять преобразования между переменными примитивных типов
обобщить ключевые понятия, изучаемые в этом курсе
- Играбельно
1. Обзор курса
2 м 6 с
- Играбельно
2. Логические операторы
11м 3с
После просмотра этого видео вы сможете описать правила булевой арифметики и реализовать их на Java.
СВОБОДНЫЙ ДОСТУП - Заблокировано
3. Операции сравнения
9м 56с
В этом видео вы узнаете, как сравнивать примитивные типы с помощью операторов сравнения.
СВОБОДНЫЙ ДОСТУП - Заблокировано
4. Логические операции
4м 17с
Узнайте, как использовать логические операторы И, логическое ИЛИ и логическое НЕ.
СВОБОДНЫЙ ДОСТУП - Заблокировано
5. Использование скобок
7м 53с
В этом видео вы узнаете, как использовать круглые скобки для изменения порядка операций в арифметических и логических выражениях.
СВОБОДНЫЙ ДОСТУП - Заблокировано
6. Унарный инкремент и декремент
8м 17с
В этом видео вы узнаете, как определить варианты использования унарных операторов инкремента и декремента.
СВОБОДНЫЙ ДОСТУП - Заблокировано
7. Сложные унарные выражения
10 м 2 с
В этом видео вы узнаете, как отлаживать сложные конструкции, построенные с использованием операторов инкремента и декремента.