Скачать книгу

чисел превышающих числовой диапазон типа также будут заменены на специальные значения:

      julia> 4.2^1000

      Inf

      julia> -4.2^1000

      –Inf

      Специальные значения

      Существует три определенных стандартных значения с плавающей точкой, которые не соответствуют ни одной точке на линии вещественных чисел:

      По стандарту IEEE 754, эти значения с плавающей точкой являются результатами определенных арифметических операций:

      julia> 1/0

      Inf

      julia> -5/0

      –Inf

      julia> 0.000001/0

      Inf

      julia> 0/0

      NaN

      julia> 1/Inf

      0.0

      julia> 1/-Inf

      –0.0

      julia> -1/Inf

      –0.0

      julia> -1/-Inf

      0.0

      julia> 500 + Inf

      Inf

      julia> 500 – Inf

      –Inf

      julia> Inf + Inf

      Inf

      julia> -Inf -Inf

      –Inf

      julia> Inf – Inf

      NaN

      julia> Inf * Inf

      Inf

      julia> Inf*-Inf

      –Inf

      julia> -Inf * -Inf

      Inf

      julia> Inf / Inf

      NaN

      julia> Inf /-Inf

      NaN

      julia> -Inf /Inf

      NaN

      julia> -Inf /-Inf

      NaN

      julia> 0 * Inf

      NaN

      julia> 0 *-Inf

      NaN

      Тип NaN

      NaN не равно, не меньше и не больше чего-либо, включая самого себя:

      julia> NaN == NaN

      false

      julia> NaN != NaN

      true

      julia> NaN < NaN

      false

      julia> NaN > NaN

      false

      Это может вызвать проблемы, например при работе с массивами:

      julia> [1 NaN] == [1 NaN]

      false

      Функции Julia для работы со специальными значениями:

      Функция isequal() считает NaNs равными друг другу:

      julia> isequal(NaN, NaN)

      true

      julia> isequal([1 NaN], [1 NaN])

      true

      julia> isequal(NaN, NaN32)

      true

      Функцию isequal() можно также использовать для различения знаковых нулей:

      julia> -0.0 == 0.0

      true

      julia> isequal(-0.0, 0.0)

      false

      Машинный эпсилон

      Большинство реальных чисел не могут быть точно представлены числами с плавающей точкой, поэтому для многих целей важно знать расстояние между двумя соседними представляемыми числами с плавающей точкой, которое часто называют машинным эпсилоном.

      Функция eps() в Julia дает расстояние между 1.0 и следующим большим значением с плавающей точкой, при использовании в качестве аргумента типа числа с плавающей точкой:

      julia> eps(Float16)

      Float16(0.000977)

      julia> eps(Float32)

      1.1920929f-7

      julia> eps(Float64)

      2.220446049250313e-16

      julia> eps(BigFloat)

      1.727233711018888925077270372560079914223200072887256277004740694033718360632485e-77

      Функция eps также может принимать в качестве аргумента значение с плавающей точкой, и выдавать абсолютную разницу между этим значением и следующим представимым значением с плавающей точкой. Другими словами, eps(x) выдает значение того же типа, что и x, такое, что x + eps(x) является следующим представимым значением с плавающей точкой, большим, чем x. Тип значения при этом также учитывается:

      julia> eps(1.0)

      2.220446049250313e-16

      julia>

Скачать книгу