Пакет scala.math
пакет math
Члены типа
final класс BigDecimal extends ScalaNumber с ScalaNumericConversions с Serializable с Ordered[BigDecimal]
BigDecimal представляет десятичные числа с плавающей точкой произвольной точности. По умолчанию, точность примерно соответствует точности чисел с плавающей точкой IEEE 128-битного формата (34 десятичных знака, HALF_EVEN режим округления). В пределах диапазона чисел IEEE binary128, BigDecimal будет совпадать с BigInt как для равенства, так и для хэш-кодов (и будет совпадать с примитивными типами тоже). За пределами этого диапазона — числа с более чем 4934 цифрами при полном представлении — hashCode BigInt и BigDecimal может отличаться из-за сложности эффективного вычисления десятичного представления в BigDecimal и двоичного представления в BigInt.
При создании BigDecimal из Double или Float, необходимо соблюдать осторожность, так как двоичное представление дробной части Double и Float не легко преобразуется в десятичное представление. Доступны три явных схемы преобразования. BigDecimal.decimal преобразует число с плавающей точкой в десятичное текстовое представление и строит BigDecimal на основе этого. BigDecimal.binary расширяет двоичную дробь до запрошенной или стандартной точности. BigDecimal.exact расширяет двоичную дробь до полного количества цифр, таким образом, получая точное десятичное значение, соответствующее двоичной дроби этого числа с плавающей точкой. BigDecimal равенство соответствует десятичному разложению Double: BigDecimal.decimal(0.1) == 0.1. Обратите внимание, что с 0.1f != 0.1, то же самое не относится к Float. Вместо этого 0.1f == BigDecimal.decimal((0.1f).toDouble).
Чтобы проверить, можно ли число BigDecimal преобразовать в Double или Float и обратно без потери информации с помощью одного из этих методов, проверьте isDecimalDouble, isBinaryDouble, или isExactDouble или соответствующие им Float версии. Обратите внимание, что BigInt's isValidDouble будет совпадать с isExactDouble, а не с isDecimalDouble используемым по умолчанию.
BigDecimal использует десятичное представление двоичных чисел с плавающей точкой для определения равенства и хэш-кодов. Это дает разные ответы, чем преобразование между Long и Double значениями, где используется точная форма. Как всегда, поскольку число с плавающей точкой является потерей информации, рекомендуется соблюдать осторожность при предположении о сохранении идентичности при множественных преобразованиях.
BigDecimal поддерживает MathContext, который определяет округление, применяемое к некоторым вычислениям. В большинстве случаев значение BigDecimal также округляется до точности, указанной в MathContext. Чтобы создать BigDecimal с точностью, отличной от MathContext, используйте new BigDecimal(new java.math.BigDecimal(...), mc). Округление будет применяться к тем математическим операциям, которые могут значительно изменить количество цифр в полном представлении, а именно умножению, делению и степеням. MathContext левого операнда всегда определяет степень округления (если необходимо) и является тем, который передается через арифметические операции, не применяющие округление сами.
final класс BigInt extends ScalaNumber с ScalaNumericConversions с Serializable с Ordered[BigInt]
трайт Equiv[T] extends Serializable
Трейт для представления отношений эквивалентности. Важно различать тип, который может быть сравнен на равенство или эквивалентность, и представление эквивалентности на некотором типе. Этот трейт предназначен для представления последнего.
отношение эквивалентности — это бинарное отношение на типе. Это отношение показано как метод equiv трейта Equiv. Отношение должно быть:
-
рефлексивным:
equiv(x, x) == true для любого x типа T.симметричным: equiv(x, y) == equiv(y, x) для любых x и y типа T.транзитивным: если equiv(x, y) == true и equiv(y, z) == true, то equiv(x, z) == true для любых x, y и z типа T. - С момента
2.7
трайт Fractional[T] extends Numeric[T]
- С момента
2.8
трайт Integral[T] extends Numeric[T]
- С момента
2.8
трайт LowPriorityEquiv extends AnyRef
трайт LowPriorityOrderingImplicits extends AnyRef
трайт Numeric[T] extends Ordering[T]
трайт Ordered[A] extends Comparable[A]
Интерфейс для данных, имеющих единственный естественный порядок. См. scala.math.Ordering перед использованием этого интерфейса для получения дополнительной информации о том, следует ли использовать scala.math.Ordering вместо него.
Классы, реализующие этот интерфейс, могут быть отсортированы с помощью scala.util.Sorting и могут быть сравнины с помощью стандартных операторов сравнения (например, > и <).
Ordered следует использовать для данных с единственным естественным порядком (например, целые числа), в то время как Ordering позволяет реализовать несколько порядков. Экземпляр Ordering будет неявно создан при необходимости.
scala.math.Ordering — это альтернатива этому интерфейсу, которая позволяет определять несколько порядков для одного и того же типа.
scala.math.PartiallyOrdered — это альтернатива этому интерфейсу для частично упорядоченных данных.
Например, создайте простой класс, реализующий Ordered , а затем отсортируйте его с помощью scala.util.Sorting:
case class OrderedClass(n:Int) extends Ordered[OrderedClass] {
def compare(that: OrderedClass) = this.n - that.n
}
val x = Array(OrderedClass(1), OrderedClass(5), OrderedClass(3))
scala.util.Sorting.quickSort(x)
x
Важно, чтобы метод equals для экземпляра Ordered[A] был согласован с методом compare. Однако из-за ограничений, присущих семантике стирания типов, нет разумного способа предоставить реализацию по умолчанию для равенства экземпляров Ordered[A]. Поэтому, если вам нужно использовать равенство для экземпляра Ordered[A], вы должны предоставить его самостоятельно, либо при наследовании, либо при создании экземпляра.
Важно, чтобы метод hashCode для экземпляра Ordered[A] был согласован с методом compare. Однако предоставить разумную реализацию по умолчанию невозможно. Поэтому, если вам нужно вычислить хеш-код для экземпляра Ordered[A], вы должны предоставить его самостоятельно, либо при наследовании, либо при создании экземпляра.
- См. также
trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable
Ordering — это интерфейс, экземпляры которого представляют стратегию сортировки экземпляров типа.
В компаньоне Ordering определено множество неявных объектов для работы с подтипами AnyVal (например, Int, Double), String и другими.
Для сортировки экземпляров по одному или нескольким переменным членам можно воспользоваться этими встроенными порядками с помощью Ordering.by и Ordering.on:
import scala.util.Sorting
val pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3))
// sort by 2nd element
Sorting.quickSort(pairs)(Ordering.by[(String, Int, Int), Int](_._2))
// sort by the 3rd element, then 1st
Sorting.quickSort(pairs)(Ordering[(Int, String)].on(x => (x._3, x._1)))
Ordering[T] реализуется путем указания compare(a:T, b:T), которое определяет, как упорядочить два экземпляра a и b. Экземпляры Ordering[T] могут использоваться такими средствами, как scala.util.Sorting, для сортировки коллекций, таких как Array[T].
Например:
import scala.util.Sorting
case class Person(name:String, age:Int)
val people = Array(Person("bob", 30), Person("ann", 32), Person("carl", 19))
// sort by age
object AgeOrdering extends Ordering[Person] {
def compare(a:Person, b:Person) = a.age compare b.age
}
Sorting.quickSort(people)(AgeOrdering)
Этот интерфейс и scala.math.Ordered оба предоставляют эту же функциональность, но по-разному. Тип T может получить единственный способ упорядочения, расширив Ordered. Используя Ordering, этот же тип может быть отсортирован многими другими способами. Ordered и Ordering оба предоставляют неявные преобразования, позволяющие использовать их взаимозаменяемо.
Вы можете импортировать scala.math.Ordering.Implicits, чтобы получить доступ к другим неявным порядкам.
- Аннотации
- @implicitNotFound( msg = ... )
- С
2.7
- См. также
trait PartialOrdering[T] extends Equiv[T]
Интерфейс для представления частичных порядков. Важно различать тип, имеющий частичный порядок, и представление частичного порядка для некоторого типа. Этот интерфейс предназначен для представления последнего.
Частичный порядок — это бинарное отношение на типе T, представленное методом lteq этого интерфейса. Это отношение должно быть:
-
рефлексивным:
lteq(x, x) == true, для любого x типа T.антисимметричным: если lteq(x, y) == true и lteq(y, x) == true, то equiv(x, y) == true, для любых x и y типа T.транзитивным: если lteq(x, y) == true и lteq(y, z) == true, то lteq(x, z) == true, для любых x, y и z типа T.Кроме того, частичный порядок индуцирует отношение эквивалентности на типе T: x и y типа T эквивалентны тогда и только тогда, когда lteq(x, y) && lteq(y, x) == true. Это отношение эквивалентности представлено методом equiv, унаследованным от интерфейса Equiv.
- С
2.7
trait PartiallyOrdered[+A] extends AnyRef
trait ScalaNumericAnyConversions extends Any
trait ScalaNumericConversions extends ScalaNumber with ScalaNumericAnyConversions
Члены-значения
final val E: Double(2.718281828459045)
def IEEEremainder(x: Double, y: Double): Double
final val Pi: Double(3.141592653589793)
def abs(x: Double): Double
def abs(x: Float): Float
def abs(x: Long): Long
def abs(x: Int): Int
def acos(x: Double): Double
def asin(x: Double): Double
def atan(x: Double): Double
def atan2(y: Double, x: Double): Double
Преобразует прямоугольные координаты (x, y) в полярные (r, theta).
- y
координата абсциссы
- x
координата ординаты
- returns
компонент theta точки
(r, theta)в полярных координатах, соответствующих точке(x, y)в декартовых координатах.
def cbrt(x: Double): Double
Возвращает кубический корень от данного Double значения.
- x
число, для которого необходимо вычислить кубический корень
- returns
значение ∛x
def ceil(x: Double): Double
def cos(x: Double): Double
def cosh(x: Double): Double
def exp(x: Double): Double
Возвращает число Эйлера e в степени Double значения.
- x
показатель степени, в которую необходимо возвести
e.- returns
значение
ea, гдеe— основание натуральных логарифмов.
def expm1(x: Double): Double
def floor(x: Double): Double
def hypot(x: Double, y: Double): Double
Возвращает квадратный корень из суммы квадратов обоих заданных Double значений без промежуточного уменьшения или переполнения.
Компонент r точки (r, theta) в полярных координатах, соответствующих точке (x, y) в декартовых координатах.
def log(x: Double): Double
Возвращает натуральный логарифм Double значения.
- x
число, для которого необходимо вычислить натуральный логарифм
- returns
значение
logₑ(x), гдеe— число Эйлера
def log10(x: Double): Double
def log1p(x: Double): Double
def max(x: Double, y: Double): Double
def max(x: Float, y: Float): Float
def max(x: Long, y: Long): Long
def max(x: Int, y: Int): Int
def min(x: Double, y: Double): Double
def min(x: Float, y: Float): Float
def min(x: Long, y: Long): Long
def min(x: Int, y: Int): Int
def pow(x: Double, y: Double): Double
Возвращает значение первого аргумента, возведенного в степень второго аргумента.
- x
основание.
- y
экспонента.
- returns
значение
xy.
def random(): Double
def rint(x: Double): Double
Возвращает значение, ближайшее по значению к аргументу и равное математическому целому числу.
- x
значение с плавающей запятой
- returns
ближайшее значение с плавающей запятой к a, которое равно математическому целому числу.
def round(x: Double): Long
Возвращает ближайшее целое число к аргументу.
- x
значение с плавающей запятой, которое нужно округлить до целого.
- returns
значение аргумента, округлённое до ближайшего целого.
def round(x: Float): Int
Возвращает ближайшее целое число к аргументу.
- x
значение с плавающей запятой, которое нужно округлить до целого.
- returns
значение аргумента, округлённое до ближайшего целого.
def signum(x: Double): Double
def signum(x: Float): Float
def signum(x: Long): Long
- Примечание
Перенаправляет на java.lang.Long
def signum(x: Int): Int
- Примечание
Перенаправляет на java.lang.Integer
def sin(x: Double): Double
def sinh(x: Double): Double
def sqrt(x: Double): Double
Возвращает квадратный корень из значения с плавающей запятой.
- x
число, для которого нужно вычислить квадратный корень
- returns
значение √x
def tan(x: Double): Double
def tanh(x: Double): Double
def toDegrees(x: Double): Double
Преобразует угол, измеренный в радианах, в приблизительно эквивалентный угол, измеренный в градусах.
- x
угол в радианах
- returns
значение угла
xв градусах.
def toRadians(x: Double): Double
Преобразует угол, измеренный в градусах, в приблизительно эквивалентный угол, измеренный в радианах.
- x
угол в градусах
- returns
значение угла
xв радианах.
def ulp(x: Float): Float
def ulp(x: Double): Double
object BigDecimal extends Serializable
- Since
2.7
object BigInt extends Serializable
- Since
2.1
object Equiv extends LowPriorityEquiv with Serializable
object Fractional extends Serializable
object Integral extends Serializable
object Numeric extends Serializable
- Since
2.8
object Ordered
object Ordering extends LowPriorityOrderingImplicits with Serializable
Это объект-компаньон для т рактата scala.math.Ordering.
Он содержит множество неявных упорядочений, а также методы для построения новых упорядочений.
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.12.9/scala/math/index.html
Объект пакета
scala.mathсодержит методы для выполнения основных числовых операций, таких как элементарные экспоненциальные, логарифмические, корневые и тригонометрические функции.Все методы перенаправляют вызовы на java.lang.Math, если не указано иное.
java.lang.Math