Пространства имён
Варианты
Действия

std::div, std::ldiv, std::lldiv

Материал из cppreference.com
< cpp‎ | numeric‎ | math
 
 
Numerics библиотеки
Общие математические функции
Плавающей точкой окружающей среды
Комплексные числа
Числовых массивов
Псевдослучайных чисел поколения
Во время компиляции рациональной арифметики (C++11)
Generic числовые операции
Оригинал:
Generic numeric operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
iota(C++11)
accumulate
inner_product
adjacent_difference
partial_sum
 
Общие математические функции
Функции
Оригинал:
Functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Основные операции
Оригинал:
Basic operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
abs(int)
labs
llabs
imaxabs



(C++11)
abs(float)
fabs
div
ldiv
lldiv
imaxdiv



(C++11)
fmod
remainder(C++11)
remquo(C++11)
fma(C++11)
fmax(C++11)
fmin(C++11)
fdim(C++11)
nan
nanf
nanl
(C++11)
(C++11)
(C++11)
Экспоненциальной функции
Оригинал:
Exponential functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
exp
exp2(C++11)
expm1(C++11)
log
log10
log1p(C++11)
log2(C++11)
Мощность функций
Оригинал:
Power functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
sqrt
cbrt(C++11)
hypot(C++11)
pow
Тригонометрические и гиперболические функции
Оригинал:
Trigonometric and hyperbolic functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
sinh
cosh
tanh
asinh(C++11)
acosh(C++11)
atanh(C++11)
Ошибка и гамма-функции
Оригинал:
Error and gamma functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
erf(C++11)
erfc(C++11)
lgamma(C++11)
tgamma(C++11)
Ближайшее целое число операций с плавающей точкой
Оригинал:
Nearest integer floating point operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ceil
floor
round
lround
llround
(C++11)
(C++11)
(C++11)
trunc(C++11)
nearbyint(C++11)
rint
lrint
llrint
(C++11)
(C++11)
(C++11)
Плавающей точкой функции манипуляции
Оригинал:
Floating point manipulation functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ldexp
scalbn
scalbln
(C++11)
(C++11)
ilogb(C++11)
logb(C++11)
frexp
modf
nextafter
nexttoward
(C++11)
(C++11)
copysign(C++11)
Классификация / сравнения
Оригинал:
Classification/Comparison
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
fpclassify(C++11)
isfinite(C++11)
isinf(C++11)
isnan(C++11)
isnormal(C++11)
signbit(C++11)
isgreater(C++11)
isgreaterequal(C++11)
isless(C++11)
islessequal(C++11)
islessgreater(C++11)
isunordered(C++11)
Макро констант
Оригинал:
Macro constants
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
FP_NORMAL
FP_SUBNORMAL
FP_ZERO
FP_INFINITE
FP_NAN
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
 
Определено в заголовочном файле <cstdlib>
std::div_t     div( int x, int y );
(1)
std::ldiv_t    div( long x, long y );
(2)
std::lldiv_t   div( long long x, long long y );
(3) (начиная с C++11)
std::ldiv_t   ldiv( long x, long y );
(4)
std::lldiv_t lldiv( long long x, long long y );
(5) (начиная с C++11)
Определено в заголовочном файле <cinttypes>
std::imaxdiv_t div( std::intmax_t x, std::intmax_t y );
(6) (начиная с C++11)
std::imaxdiv_t imaxdiv( std::intmax_t x, std::intmax_t y );
(7) (начиная с C++11)

Вычисляет частное и остаток от целочисленного деления x на y.

Частное - это алгебраическое частное, чья дробная часть отброшена (в сторону нуля). Остаток вычисляется как quot * y + rem == x.

(до C++11)

Частное - это результат выражения x/y, остаток результат выражения x%y.

(начиная с C++11)

Содержание

[править] Параметры

x, y - Целые числа

[править] Возвращаемое значение

Если и остаток и частное может быть представлено в виде объектов требуемого типа (int, long, long long, std::imaxdiv_t) возвращается объекты типа std::div_t, std::ldiv_t, std::lldiv_t, std::imaxdiv_t соответственно, определённые как:

std::div_t

struct div_t { int quot; int rem; };

Или

struct div_t { int rem; int quot; };

std::ldiv_t

struct ldiv_t { long quot; long rem; };

Или

struct ldiv_t { long rem; long quot; };

std::lldiv_t

struct lldiv_t { long long quot; long long rem; };

Или

struct lldiv_t { long long rem; long long quot; };

std::imaxdiv_t

struct imaxdiv_t { std::intmax_t quot; std::intmax_t rem; };

Или

struct imaxdiv_t { std::intmax_t rem; std::intmax_t quot; };

Если или остаток, или частное не могут представлены, то поведение этой функции не определено.

[править] Примечание

До C++11, направление округления частного и знак остатка в встроенных операциях целочисленного деления и взятия остатка зависело от реализации, если один из операндов был отрицательным, но это было хорошо определено в std::div.

На многих платформах, одна инструкция центрального процессора могла вычислить частное и остаток, и эта функция могла воспользоваться этим, более того компиляторы могут объединить рядом стоящие / и %, где это возможно.

[править] Пример

#include <string>
#include <cmath>
#include <cstdlib>
#include <iostream>
 
std::string itoa(int n, int base)
{
    std::string buf;
    std::div_t dv{}; dv.quot = n;
    do {
        dv = std::div(dv.quot, base);
        buf += "0123456789abcdef"[std::abs(dv.rem)];  // Строковой литерал - это массив
    } while(dv.quot);
    if(n<0) buf += '-';
    return {buf.rbegin(), buf.rend()};
}
 
int main()
{
    std::cout << itoa(12345, 10) << '\n'
              << itoa(-12345, 10) << '\n'
              << itoa(65535, 16) << '\n';
}

Вывод:

12345
-12345
ffff

[править] См. также

Остальная часть операции с плавающей точкой разделения
Оригинал:
remainder of the floating point division operation
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
(C++11)
подписан остаток от деления операции
Оригинал:
signed remainder of the division operation
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
(C++11)
Остальные подписанные, а также три последних бита операции деления
Оригинал:
signed remainder as well as the three last bits of the division operation
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]