Spec-Zone.ru › D

core.checkedint

Этот модуль реализует примитивы целочисленной арифметики, которые проверяют результаты на выход за пределы диапазона.

Операторы целочисленной арифметики работают с типами фиксированной ширины. Результаты, которые не могут быть представлены в этих фиксированных ширинах, неявно усекаются для соответствия. Этот модуль предлагает примитивы целочисленной арифметики, которые дают те же результаты, но устанавливают флаг «переполнение» при таком усечении. Установка флага «липкая», что означает, что можно выполнить множество операций, а затем проверить флаг только в конце. Подпись операции (знаковая или беззнаковая) обозначается суффиксом 's' или 'u' соответственно. Хотя этого можно достичь без таких суффиксов, используя перегрузку по знаковости типов, суффикс позволяет ясно указать, что происходит, без необходимости проверки типов.

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

Ссылки
Быстрые проверки переполнения целых чисел
Лицензия:
Лицензия Boost 1.0
Авторы:
Walter Bright
Исходный код
core/checkedint.d
int adds()(int x, int y, ref bool overflow);

long adds()(long x, long y, ref bool overflow);

Сложить два целых знаковых числа, проверив переполнение.

Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.

Параметры:
int x левый операнд
int y правый операнд
bool overflow устанавливается, если происходит переполнение, иначе не изменяется
Возвращаемое значение:
сумма
uint addu()(uint x, uint y, ref bool overflow);

ulong addu()(ulong x, ulong y, ref bool overflow);

Сложить два целых беззнаковых числа, проверив переполнение (т.е. перенос).

Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.

Параметры:
uint x левый операнд
uint y правый операнд
bool overflow устанавливается, если происходит переполнение, иначе не изменяется
Возвращаемое значение:
сумма
int subs()(int x, int y, ref bool overflow);

long subs()(long x, long y, ref bool overflow);

Вычесть два целых знаковых числа, проверив переполнение.

Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.

Параметры:
int x левый операнд
int y правый операнд
bool overflow устанавливается, если происходит переполнение, иначе не изменяется
Возвращаемое значение:
разность
uint subu()(uint x, uint y, ref bool overflow);

ulong subu()(ulong x, ulong y, ref bool overflow);

Вычесть два целых беззнаковых числа, проверив переполнение (т.е. заём).

Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.

Параметры:
uint x левый операнд
uint y правый операнд
bool overflow устанавливается, если происходит переполнение, иначе не изменяется
Возвращаемое значение:
разность
int negs()(int x, ref bool overflow);

long negs()(long x, ref bool overflow);

Изменить знак целого числа.

Параметры:
int x операнд
bool overflow устанавливается, если x нельзя изменить знак, иначе не изменяется
Возвращаемое значение:
отрицание x
int muls()(int x, int y, ref bool overflow);

long muls()(long x, long y, ref bool overflow);

Перемножить два целых знаковых числа, проверив переполнение.

Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.

Параметры:
int x левый операнд
int y правый операнд
bool overflow устанавливается, если происходит переполнение, иначе не изменяется
Возвращаемое значение:
произведение
uint mulu()(uint x, uint y, ref bool overflow);

ulong mulu()(ulong x, uint y, ref bool overflow);

ulong mulu()(ulong x, ulong y, ref bool overflow);

Перемножить два целых беззнаковых числа, проверив переполнение (т.е. перенос).

Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.

Параметры:
uint x левый операнд
uint y правый операнд
bool overflow устанавливается, если происходит переполнение, иначе не изменяется
Возвращаемое значение:
произведение

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/core_checkedint.html

Spec-Zone.ru

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