Какие операции можно выполнять над вещественными числами?
Вещественные числа используются там, где нужны дробные значения: измерения, координаты, проценты, вероятности, физические расчеты, графика и статистика. Над ними выполняются почти те же арифметические операции, что и над целыми, но с учетом погрешности представления.
Основные арифметические операции
Сложение и вычитание
Сложение и вычитание применяются для вычисления сумм, разностей, смещений, изменений величин.
const x = 12.5;
const y = 3.2;
console.log(x + y);
console.log(x - y);const x = 12.5;
const y = 3.2;
console.log(x + y);
console.log(x - y);package main
import "fmt"
func main() {
x := 12.5
y := 3.2
fmt.Println(x + y)
fmt.Println(x - y)
}public class Example {
public static void main(String[] args) {
var x = 12.5;
var y = 3.2;
System.out.println(x + y);
System.out.println(x - y);
}
}x = 12.5
y = 3.2
print(x + y)
print(x - y)Умножение и деление
Умножение и деление используются при масштабировании, расчете средних значений, процентов и коэффициентов.
const price = 1200.5;
const discount = 0.15;
const finalPrice = price * (1 - discount);const price = 1200.5;
const discount = 0.15;
const finalPrice = price * (1 - discount);package main
func main() {
price := 1200.5
discount := 0.15
finalPrice := price * (1 - discount)
}public class Example {
public static void main(String[] args) {
var price = 1200.5;
var discount = 0.15;
var finalPrice = price * (1 - discount);
}
}price = 1200.5
discount = 0.15
finalPrice = price * (1 - discount)Возведение в степень и корень
Для математических задач часто нужны степени, квадратные корни, модули и другие функции.
const square = Math.pow(5, 2);
const root = Math.sqrt(49);const square = Math.pow(5, 2);
const root = Math.sqrt(49);package main
import "math"
func main() {
square := math.Pow(5, 2)
root := math.Sqrt(49)
}public class Example {
public static void main(String[] args) {
var square = Math.pow(5, 2);
var root = Math.sqrt(49);
}
}import math
square = pow(5, 2)
root = math.sqrt(49)Математические функции
Во многих языках есть стандартные математические библиотеки.
Обычно доступны:
- модуль числа;
- округление;
- синус, косинус, тангенс;
- логарифмы;
- экспонента;
- минимум и максимум;
- генерация случайных чисел.
const value = -3.75;
console.log(Math.abs(value));
console.log(Math.round(value));
console.log(Math.floor(value));
console.log(Math.ceil(value));const value = -3.75;
console.log(Math.abs(value));
console.log(Math.round(value));
console.log(Math.floor(value));
console.log(Math.ceil(value));package main
import (
"fmt"
"math"
)
func main() {
value := -3.75
fmt.Println(math.Abs(value))
fmt.Println(math.Round(value))
fmt.Println(math.Floor(value))
fmt.Println(math.Ceil(value))
}public class Example {
public static void main(String[] args) {
var value = -3.75;
System.out.println(Math.abs(value));
System.out.println(Math.round(value));
System.out.println(Math.floor(value));
System.out.println(Math.ceil(value));
}
}import math
value = -3.75
print(abs(value))
print(round(value))
print(math.floor(value))
print(math.ceil(value))Сравнение вещественных чисел
Вещественные числа можно сравнивать с помощью больше, меньше, больше или равно, меньше или равно. Но проверка на точное равенство требует осторожности.
Причина в том, что многие десятичные дроби не представляются точно в двоичной форме.
Правильный подход — сравнивать с допустимой погрешностью.
function almostEqual(a, b) {
const eps = 0.000001;
return Math.abs(a - b) < eps;
}function almostEqual(a: number, b: number): boolean {
const eps = 0.000001;
return Math.abs(a - b) < eps;
}func almostEqual(a float64, b float64) bool {
eps := 0.000001
return math.Abs(a-b) < eps
}public class Example {
static boolean almostEqual(double a, double b) {
var eps = 0.000001;
return Math.abs(a - b) < eps;
}
}def almost_equal(a, b):
eps = 0.000001
return abs(a - b) < epsОкругление
Округление нужно, когда результат надо представить с ограниченным числом знаков.
Основные варианты:
- округление к ближайшему целому;
- округление вниз;
- округление вверх;
- отбрасывание дробной части;
- округление до заданного числа знаков.
Особенности вещественной арифметики
При работе с вещественными числами нужно учитывать:
- возможную потерю точности;
- накопление ошибок при длинных вычислениях;
- переполнение при слишком больших значениях;
- потерю значащих цифр при вычитании близких чисел;
- специальные значения вроде бесконечности и NaN.
Вывод
над вещественными числами выполняют арифметические операции, сравнения, округления и математические функции. Главное отличие от целых чисел — необходимость учитывать погрешность и ограниченную точность представления.
Источники
- Семакин И.Г. Основы программирования и баз данных. Учебник. - М.: Академия, 2014. - 224 с.
- Симонова Е.В. Структуры данных в C#. Линейные и нелинейные динамические структуры. - Лань, 2018. - 152 с.
- Бертран Мейер. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. - М.: Национальный Открытый Университет "ИНТУИТ": БИНОМ. Лаборатория знаний, 2011. - 775 с.
- Мэтт Вайсфельд. Объектно-ориентированное мышление. - СПб.: Питер, 2014. - 304 с.
- Ривест Р., Штайн К., Лейзерсон Ч., Кормен Т. Алгоритмы: построение и анализ. - М.: Вильямс, 2007. - 1296 с.
- Стивенс Род. Алгоритмы. Теория и практическое применение. - М.: Эксмо, 2017. - 544 с.
- Рублев В.С. Основы теории алгоритмов. - 2-е издание, исправленное. - М.: Научный мир, 2008. - 128 с.
- Гольдберг Г.Л. Основы алгоритмизации и программирования. - М.: Академия, 2012. - 384 с.
- Лаврищева И.В. Технология программирования. - М.: Горячая линия - Телеком, 2011. - 400 с.
- Сергеев И.С., Сухоруков А.И., Шестаков А.А. Программирование: учебник для вузов. - М.: БИНОМ. Лаборатория знаний, 2013. - 512 с.