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

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

Материал из cppreference.com
< cpp‎ | numeric‎ | math
 
 
Numerics библиотеки
Общие математические функции
Плавающей точкой окружающей среды
Комплексные числа
Числовых массивов
Псевдослучайных чисел поколения
Во время компиляции рациональной арифметики (C++11)
Generic числовые операции
Оригинал:
Generic numeric operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
 
Общие математические функции
Функции
Оригинал:
Functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Основные операции
Оригинал:
Basic operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Экспоненциальной функции
Оригинал:
Exponential functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Мощность функций
Оригинал:
Power functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тригонометрические и гиперболические функции
Оригинал:
Trigonometric and hyperbolic functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Ошибка и гамма-функции
Оригинал:
Error and gamma functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Ближайшее целое число операций с плавающей точкой
Оригинал:
Nearest integer floating point operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Плавающей точкой функции манипуляции
Оригинал:
Floating point manipulation functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Классификация / сравнения
Оригинал:
Classification/Comparison
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Макро констант
Оригинал:
Macro constants
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
 
Defined in header <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)
Defined in header <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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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