powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Целочисленные типы с плавающей запятой
19 сообщений из 19, страница 1 из 1
Целочисленные типы с плавающей запятой
    #39416558
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли такие?
В стандарте что-то такое планируется, в <experimental> что-то было, но мне никто так и не ответил, где это можно скачать?
Цели:
1. избавиться от ошибок во float/double
2. избыточная точность float. Нужно 1,2,3 цифры после запятой
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39416605
ermak.nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

Не знаю, поможет ли, но есть другая форма представления, в виде дроби http://www.boost.org/doc/libs/1_63_0/libs/rational/rational.html
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39416611
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ermak.nnCEMb,

Не знаю, поможет ли, но есть другая форма представления, в виде дроби http://www.boost.org/doc/libs/1_63_0/libs/rational/rational.html
Судя по тому что там используются lcm/gcd это число типа рациональная дробь. Его интересно
использовать в математике для доказательства сходимости рядов. Но у него есть недостатки.
Базовая арифметика реализована сложнее и требует приведения произвольной дроби
к рациональной после каждой операции.

В обычных вычислениях (финансовых или научных) его использовать нельзя. Или вы получите
сильный рост нагрузки на CPU с ростом длины числителя и знаменателя. В обычных типах
(double,int) этого не наблюдается и базовые операции +, -, /, * мы условно принимаем
за o(1).

Собственно o(1) это и есть главная аргументация в пользу использования double/float
в научных расчетах.
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39416619
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а что на счёт <experimental>? ·_·
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39416649
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb... а что на счёт <experimental>? ·_·
Я не знаю что это.
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39416650
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, я думал что есть, но не везде

https://gcc.gnu.org/onlinedocs/libstdc /libstdc -api-4.6/a01152.html
тут есть две либы
http://stackoverflow.com/questions/14096026/c-decimal-data-types
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39596164
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb... а что на счёт <experimental>? ·_·

Есть draft TR потому вероятно в experimental/ вы вероятно не найдете соотвествующую реализацию
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39596173
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglСтранно, я думал что есть, но не везде

тут есть две либы
http://stackoverflow.com/questions/14096026/c-decimal-data-types

http://stackoverflow.com/questions/14096026/c-decimal-data-types The classes from the Decimal TR are not implemented for all compilers.

и не должны
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39596213
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

и в чём проблема сделать этот тип самому? только из сути вопроса, наверное, не с плавающей, а с фиксированной дробной частью
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39596344
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO Странный вопрос "Целочисленные типы с плавающей запятой". Тут или крестик или трусы. Или целочисленный или с плавающей.

Что нужно топик-стартеру, не понятно совершенно.
Толи ему нужна 10-чная арифметика (BCD) "избавиться от ошибок"
Толи фиксированная точка "Нужно 1,2,3 цифры"
Толи какая нибудь экзотика "другая форма представления, в виде дроби"
Толи все вместе ))) в одном флаконе
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39596447
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbЕсть ли такие?
В стандарте что-то такое планируется, в <experimental> что-то было, но мне никто так и не ответил, где это можно скачать?
Цели:
1. избавиться от ошибок во float/double
2. избыточная точность float. Нужно 1,2,3 цифры после запятой
В C++ Builder есть тип currency.
Физически представляет собой 64-битное знаковое целое, интерпретируется как дробное десятичное с фиксированной запятой с точностью четыре десятичных знака после запятой.
Физически хранимое значение интерпретируется как оно же самое, уменьшенное в 10000 раз.
То есть, число 11.27 хранится в виде целого числа 112700.
...
В С++ ты без проблем реализуешь подобную схему с нужной точностью и длиной.
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39597073
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)CEMb,

и в чём проблема сделать этот тип самому? только из сути вопроса, наверное, не с плавающей, а с фиксированной дробной частью

А зачем изобретать велосипед?)


Leonid KudryavtsevIMHO Странный вопрос "Целочисленные типы с плавающей запятой". Тут или крестик или трусы. Или целочисленный или с плавающей.

Что нужно топик-стартеру, не понятно совершенно.
Толи ему нужна 10-чная арифметика (BCD) "избавиться от ошибок"
Толи фиксированная точка "Нужно 1,2,3 цифры"
Толи какая нибудь экзотика "другая форма представления, в виде дроби"
Толи все вместе ))) в одном флаконе

Просто особенности перевода Extension for the programming language C++ to support decimal floating point , что автор хочет вполне понятно;) тем более он явно пишет об experimental
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39597133
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbЕсть ли такие?
В стандарте что-то такое планируется, в <experimental> что-то было, но мне никто так и не ответил, где это можно скачать?
Цели:
1. избавиться от ошибок во float/double
2. избыточная точность float. Нужно 1,2,3 цифры после запятой
Всё-таки целочисленные типы не имеют запятой, а запятую имеют только дробные :)

Планируют то давно типы decimal32, decimal64, decimal128:
http://en.cppreference.com/w/cpp/experimental ISO/IEC TR 24733:2011 Extensions for the programming language C++ to support decimal floating-point arithmetic
Аж в 2006 году начали, но как в 2009 повисло и всё: https://isocpp.org/std/status

Так то уже есть в g++ (соответствуют вашим пунктам 1 и 2 - всего 4 знака после запятой), но это непереносимо на Clang или MSVC: http://coliru.stacked-crooked.com/a/14feb12ca81a0157
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <cmath>
#include <iostream>
#include <string>
#include <decimal/decimal>
#include <limits>       // std::numeric_limits


std::ostream& operator<< (std::ostream& out,
                          std::decimal::decimal64 const& value)
{
    return out << std::decimal::decimal_to_double(value);
}


int main()
{
    std::decimal::decimal64 val = 10.12345DD;
    
    std::cout << val << std::endl;



    return 0;
} 



В бусте есть cpp_dec_float_50 и cpp_dec_float_100, но это по 80 байт :)

Поэтому если прям очень нужно, можно посмотреть:
1. Intel(R) Decimal Floating-Point Math Library: http://www.netlib.org/misc/intel/IntelRDFPMathLib20U1.tar.gz
2. Decimal Floating Point C Library: https://github.com/libdfp/libdfp
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39597135
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-то всё-таки надеется:
https://habrahabr.ru/post/333414/ Numerics [pdf]

В разработке на ранней стадии. Кое-что из продвинутой арифметики наверняка войдет в С++20: decimal floating point , bounded types (например, fixed point types ), unbounded types, multiprecision arithmetic. Должно пригодиться в работе в работе игровым разработчикам (которые, впрочем, привыкли сами писать то, что им требуется).
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39597281
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury...
Просто особенности перевода Extension for the programming language C++ to support decimal floating point , что автор хочет вполне понятно;) тем более он явно пишет об experimental
Крайне творческий перевод. Помесь английского и нижегородского, с приволжским говором... пойди тут пойми ))).

Decimal это все же НЕ "Целочисленные". AFAIK


по версии translate.yandex.ru (слова "целочисленные" нет ни разу, а значение в качестве прилагательного вообще только одно "десятичный")

decimal [ˈdesɪməl] сущ
десятичное число, десятичная дробь, десятичная система
(decimal number, decimal fraction, decimal system)
десятичный знак
(decimal place)
десятичная запятая, десятичная точка
(decimal point)
тип decimal
(decimal type)

decimal [ˈdesɪməl] прил
десятичный, децимальный
(decimal place)

decimal [ˈdesɪməl] числ
десятыми
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39598657
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох. Пока стандарт делают, я, пожалуй, перейду на проценты


Интересно, а как другие работают, например, с копейками? Отдельной переменной? Класс с отдельными рублями и копейками?
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39599134
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbОх. Пока стандарт делают, я, пожалуй, перейду на проценты


Интересно, а как другие работают, например, с копейками? Отдельной переменной? Класс с отдельными рублями и копейками?
А вот тоже хз, побыстрому можно налепить что-то вроде такого:
http://coliru.stacked-crooked.com/a/5fa28fe7ee48c418
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
template <typename base_t, unsigned int divider>
class custom_decimal {  
 base_t val;
public:
 base_t get_integer() const { return val / divider; }
 base_t get_fractional() const { return val % divider; }
 template <typename T> operator T() const { return get_integer(); }
 operator double() const { return (double)val/divider; }
 operator float() const { return (float)val/divider; }
 custom_decimal(double const src) : val(src*divider) {}
 template <typename T> custom_decimal(T const src) : val(src*divider) {}
 custom_decimal operator* (custom_decimal src) { src.val = src.val*val/divider; return src; }
 custom_decimal operator+ (custom_decimal src) { src.val = src.val+val; return src; }
 custom_decimal operator- (custom_decimal src) { src.val = src.val-val; return src; }
 custom_decimal operator/ (custom_decimal src) { src.val = divider*src.val/val; return src; }
};

template<typename base_t, unsigned int divider>
std::ostream& operator<< (std::ostream& out, custom_decimal<base_t, divider> const val) {
  std::string str = std::to_string(val.get_fractional() + divider);
  str = str.substr(1, str.length()-1);
  return out << val.get_integer() << "." << str;
}

typedef custom_decimal<int64_t, 100> decimal64;
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39599163
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткинclass custom_decimal {

ДВОИЧНОЕ число с ФИКСИРОВАННОЙ точкой никакого отношения к Decimal арифметике не имеет.

IMHO
...
Рейтинг: 0 / 0
Целочисленные типы с плавающей запятой
    #39599223
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevВася Уткинclass custom_decimal {

ДВОИЧНОЕ число с ФИКСИРОВАННОЙ точкой никакого отношения к Decimal арифметике не имеет.

IMHO
Зато, если настоящий decimal удовлетворяет этой части условия: Целочисленные (десятичные дробные) типы с плавающей запятой
То мой вариант удовлетворяет этой части условия: Целочисленные типы с плавающей (фиксированной) запятой
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Целочисленные типы с плавающей запятой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]