Spec-Zone.ru › Scala 2.13 Library

Пакет scala.math

пакет math

Объект пакета scala.math содержит методы для выполнения основных числовых операций, таких как элементарные экспоненциальные, логарифмические, корневые и тригонометрические функции.

Все методы перенаправляются на java.lang.Math, если не указано иное.

Исходный код
package.scala
См. также

java.lang.Math

Линейные надтипы
AnyRef, Any

Члены типов

final класс BigDecimal extends ScalaNumber with ScalaNumericConversions with Serializable with 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 with ScalaNumericConversions with Serializable with 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.
Since

2.7

адаптер Fractional[T] extends Numeric[T]

Since

2.8

адаптер Integral[T] extends Numeric[T]

Since

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], вы должны предоставить его самостоятельно при наследовании или создании экземпляра.

См. также

scala.math.Ordering, scala.math.PartiallyOrdered

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("Нет неявного Ordering, определенного для ${T}.")
С момента

2.7

См. также

scala.math.Ordered, scala.util.Sorting

trait PartialOrdering[T] extends Equiv[T]

A trait for representing partial orderings. It is important to distinguish between a type that has a partial order and a representation of partial ordering on some type. This trait is for representing the latter.

A частично упорядоченное множество is a binary relation on a type T, exposed as the lteq method of this trait. This relation must be:

    reflexive: lteq(x, x) == true, for any x of type T.anti-symmetric: if lteq(x, y) == true and lteq(y, x) == true then equiv(x, y) == true, for any x and y of type T.transitive: if lteq(x, y) == true and lteq(y, z) == true then lteq(x, z) == true, for any x, y, and z of type T.

Additionally, a partial ordering induces an отношение эквивалентности on a type T: x and y of type T are equivalent if and only if lteq(x, y) && lteq(y, x) == true. This equivalence relation is exposed as the equiv method, inherited from the Equiv trait.

Since

2.7

trait PartiallyOrdered[+A] extends Any

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 addExact(x: Long, y: Long): Long

def addExact(x: Int, y: Int): Int

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 copySign(magnitude: Float, sign: Float): Float

def copySign(magnitude: Double, sign: Double): Double

def cos(x: Double): Double

def cosh(x: Double): Double

def decrementExact(x: Long): Long

def decrementExact(x: Int): Int

def exp(x: Double): Double

Возвращает число Эйлера e в степени Double значения.

x

показатель степени, к которому возводится e.

returns

значение ea, где e — основание натуральных логарифмов.

def expm1(x: Double): Double

def floor(x: Double): Double

def floorDiv(x: Long, y: Long): Long

def floorDiv(x: Int, y: Int): Int

def floorMod(x: Long, y: Long): Long

def floorMod(x: Int, y: Int): Int

def getExponent(d: Double): Int

def getExponent(f: Float): Int

def hypot(x: Double, y: Double): Double

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

Компонент r точки (r, theta) в полярных координатах, соответствующий точке (x, y) в декартовых координатах.

def incrementExact(x: Long): Long

def incrementExact(x: Int): Int

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 multiplyExact(x: Long, y: Long): Long

def multiplyExact(x: Int, y: Int): Int

def negateExact(x: Long): Long

def negateExact(x: Int): Int

def nextAfter(start: Float, direction: Double): Float

def nextAfter(start: Double, direction: Double): Double

def nextDown(f: Float): Float

def nextDown(d: Double): Double

def nextUp(f: Float): Float

def nextUp(d: Double): Double

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

Возвращает ближайшее Long к аргументу.

x

значение с плавающей запятой, которое должно быть округлено до Long.

returns

значение аргумента, округлённое до ближайшего значенияlong.

def round(x: Float): Int

Возвращает ближайшее Int к аргументу.

x

значение с плавающей запятой, которое должно быть округлено до Int.

returns

значение аргумента, округлённое до ближайшего Int значения.

def scalb(f: Float, scaleFactor: Int): Float

def scalb(d: Double, scaleFactor: Int): Double

def signum(x: Double): Double

def signum(x: Float): Float

def signum(x: Long): Long

Note

Перенаправляет на java.lang.Long

def signum(x: Int): Int

Note

Перенаправляет на java.lang.Integer

def sin(x: Double): Double

def sinh(x: Double): Double

def sqrt(x: Double): Double

Возвращает квадратный корень от Double значения.

x

число, для которого необходимо вычислить квадратный корень

returns

значение √x

def subtractExact(x: Long, y: Long): Long

def subtractExact(x: Int, y: Int): Int

def tan(x: Double): Double

def tanh(x: Double): Double

def toDegrees(x: Double): Double

Преобразует угол, измеренный в радианах, в приблизительно эквивалентный угол, измеренный в градусах.

x

угол, в радианах

returns

измерение угла x в градусах.

def toIntExact(x: Long): Int

def toRadians(x: Double): Double

Преобразует угол, измеренный в градусах, в приблизительно эквивалентный угол, измеренный в радианах.

x

угол в градусах

returns

измерение угла x в радианах.

def ulp(x: Float): Float

def ulp(x: Double): Double

object BigDecimal extends java.io.Serializable

Since

2.7

object BigInt extends java.io.Serializable

Since

2.1

object Equiv extends LowPriorityEquiv with java.io.Serializable

объект Fractional extends java.io.Serializable

объект Integral extends java.io.Serializable

объект Numeric extends java.io.Serializable

Since

2.8

объект Ordered

объект Ordering extends LowPriorityOrderingImplicits with java.io.Serializable

Это компаньон-объект для трейта scala.math.Ordering.

Он содержит множество неявных порядков, а также методы для построения новых порядков.

объект PartialOrdering extends java.io.Serializable

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/math/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API