Какие операции можно выполнять над вещественными числами?

Вещественные числа используются там, где нужны дробные значения: измерения, координаты, проценты, вероятности, физические расчеты, графика и статистика. Над ними выполняются почти те же арифметические операции, что и над целыми, но с учетом погрешности представления.

Основные арифметические операции

Сложение и вычитание

Сложение и вычитание применяются для вычисления сумм, разностей, смещений, изменений величин.

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

Округление

Округление нужно, когда результат надо представить с ограниченным числом знаков.

Основные варианты:

Особенности вещественной арифметики

При работе с вещественными числами нужно учитывать:

Вывод

над вещественными числами выполняют арифметические операции, сравнения, округления и математические функции. Главное отличие от целых чисел — необходимость учитывать погрешность и ограниченную точность представления.

Источники

  • Семакин И.Г. Основы программирования и баз данных. Учебник. - М.: Академия, 2014. - 224 с.
  • Симонова Е.В. Структуры данных в C#. Линейные и нелинейные динамические структуры. - Лань, 2018. - 152 с.
  • Бертран Мейер. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. - М.: Национальный Открытый Университет "ИНТУИТ": БИНОМ. Лаборатория знаний, 2011. - 775 с.
  • Мэтт Вайсфельд. Объектно-ориентированное мышление. - СПб.: Питер, 2014. - 304 с.
  • Ривест Р., Штайн К., Лейзерсон Ч., Кормен Т. Алгоритмы: построение и анализ. - М.: Вильямс, 2007. - 1296 с.
  • Стивенс Род. Алгоритмы. Теория и практическое применение. - М.: Эксмо, 2017. - 544 с.
  • Рублев В.С. Основы теории алгоритмов. - 2-е издание, исправленное. - М.: Научный мир, 2008. - 128 с.
  • Гольдберг Г.Л. Основы алгоритмизации и программирования. - М.: Академия, 2012. - 384 с.
  • Лаврищева И.В. Технология программирования. - М.: Горячая линия - Телеком, 2011. - 400 с.
  • Сергеев И.С., Сухоруков А.И., Шестаков А.А. Программирование: учебник для вузов. - М.: БИНОМ. Лаборатория знаний, 2013. - 512 с.