Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Сергей Игнатьев
222 / 57 / 18
Регистрация: 13.03.2017
Сообщений: 295

В какой версии С++ работают переменные long double ?

22.08.2023, 10:22. Показов 1284. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос: какова максимальная разрядность переменных типа long double и в какой версии С++ они работают?
Есть особенности применения этих переменных?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2023, 10:22
Ответы с готовыми решениями:

Какой спецификатор использовать для корректного вывода типа данных double и long double
Подскажите пожалуйста, какой спецификатор использовать для корректного вывода типа данных double и long double. printf(" float...

Разработать Си-программу, содержащую 6 переменных одного типа (long double) и 2 указателя на любые эти переменные
Вывести на экран: a. Размер - кол-во байт, выделенных под переменные и указатели; b. Значения переменных; c. Значения указателей; ...

Напишите следущие перегруженные функции (long, double, short), которые работают с матрицой из случайных чисел:
Напишите следущие перегруженные функции (long, double, short), которые работают с матрицой из случайных чисел: - Вывод на экран матрицы M...

19
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6225 / 2926 / 1046
Регистрация: 01.06.2021
Сообщений: 10,838
22.08.2023, 11:03
Лучший ответ Сообщение было отмечено Сергей Игнатьев как решение

Решение

Сергей Игнатьев, этот long double был ещё в старых версиях языка С, например 1989 года. Поэтому полагаю, что в С++ он присутствует с самого начала.
Касательно того, что это такое, то это тот же double, но на некоторых устройствах предлагает более высокую точность. Т.е. зависит от железа. Например, может быть так, что long double будет занимать 8 байт, тогда никакой разницы с double, которая тоже столько занимает, не будет. Но long double также в зависимости от устройства может занимать 12 или 16 байт. Тогда макс экспонента согласно IEEE 754 будет не 308, а 4932. Кроме того, будет больше значащих цифр от 18-21 (80-битный случай, который обычно реализован с использованием 12 или 16 байт) до 33-36 (для случая 16 байт) вместо 15-18 (случай 8 байт).
Применяется достаточно редко.
1
 Аватар для Сергей Игнатьев
222 / 57 / 18
Регистрация: 13.03.2017
Сообщений: 295
22.08.2023, 12:18  [ТС]
Royal_X, спасибо за ответ. Я занимаюсь астрономическими расчетами, где для обеспечения максимальной точности вычисления орбит путем интегрирования уравнений движения по времени требуется очень высокая разрядность действительных переменных. Та же проблема возникает, например при численном решении "задачи трех тел". С некоторыми моими результатами можно ознакомиться в моих темах. Для меня это вопрос не праздный, а имеющий прикладное значение.
Меня прежде всего интересует сколько значащих десятичных цифр можно использовать в мантиссе. например в double используется 16 значащих цифр, а мне нужно минимум 29. Порядок числа может быть от +/- 127. Что бы Вы могли порекомендовать, какую версию или публикацию, буду весьма благодарен.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
22.08.2023, 13:09
Цитата Сообщение от Сергей Игнатьев Посмотреть сообщение
мне нужно минимум 29
В gcc есть тип __float128 (работает не для всех платформ), у которого соответственно 34 десятичных разряда. Должно хватить.
https://gcc.gnu.org/onlinedocs... Types.html
2
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6225 / 2926 / 1046
Регистрация: 01.06.2021
Сообщений: 10,838
22.08.2023, 13:26
Сергей Игнатьев, если не подойдёт совет DrOffset, то могу предложить использовать библиотеку boost multiprecision

Сергей Игнатьев, на форуме был случай, когда не хватало точности. Вот, можете смотреть пример, как использовать boost: Вычисление конечных сумм и произведений. Вычислить значение выражения
1
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 866
22.08.2023, 13:40
Не рекомендую тспользовать такой тип данных если вы не знаете как это будет реализовано и особенно если вашу программу будет кто-то ещё переделывать или использовать - ибо многое зависит от реализации такого типа данных на конкретной системе.

Если нужно получать точные расчёты - то надо использовать https://ru.wikipedia.org/wiki/... 0%BA%D0%B0

и соответствующий софт https://en.wikipedia.org/wiki/... c_software
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
22.08.2023, 13:45
Цитата Сообщение от DrOffset Посмотреть сообщение
В gcc есть тип __float128
Я правильно понял, что данный тип появился в стандарте 2015 https://gcc.gnu.org/onlinedocs... Types.html
и gcc просто поддерживает данный тип?
0
 Аватар для Сергей Игнатьев
222 / 57 / 18
Регистрация: 13.03.2017
Сообщений: 295
22.08.2023, 13:49  [ТС]
Спасибо всем, теперь есть над чем думать и пробовать различные варианты реализации.
0
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
22.08.2023, 15:16
Цитата Сообщение от Сергей Игнатьев Посмотреть сообщение
Я занимаюсь астрономическими расчетами
если используете gcc/g++ или другой компилятор предоставляющий типы decimal, то попробуйте. Этот тип используется для финансовых расчетов, но Вам тоже может подойти. Также посмотрите в сторону библиотеки armadillo реализующей математические функции Matlab для С++, ну или, как вариант, и вовсе производить научные расчеты в матлабе - инструмент более подходящий для этой задачи чем плюсы.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.08.2023, 15:52
Цитата Сообщение от Annemesski Посмотреть сообщение
в матлабе - инструмент более подходящий для этой задачи чем плюсы.
Как думаете, что они используют ?
Ту же длинную арифметику, как пить дать.
0
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
22.08.2023, 16:18
SmallEvil, дело не в том что там под капотом, матлаб заточен для математического моделирования и научных расчетов, те же матрицы там - это встроенный тип данных. Плюс к тому там много всяких фич для визуализации наборов данных в виде графиков, диа-, гисто- и прочих грамм.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.08.2023, 17:04
Annemesski, и как с ним работать ? автоматизировать ? Использовать своим модули на С++, которые будут делать что что МатЛАб не может ?
Я просто не понял при чем тут матлаб при вопросе о С++ ?
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6225 / 2926 / 1046
Регистрация: 01.06.2021
Сообщений: 10,838
22.08.2023, 17:27
Annemesski, вообще, не очень хорошо рекомендовать проприетарный софт, не имеющий никакого отношения к С++. Как минимум, вам нужно купить для ТС лицензию матлаба, чтобы разговор стал предметным. Более того, есть бесплатные Octave и Scilab, которые способны заменить матлаб, не говоря уже о том, что я сомневаюсь, что этот матлаб вообще нужен ТС.
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
22.08.2023, 17:30
Цитата Сообщение от Сергей Игнатьев Посмотреть сообщение
максимальной точности
я в этом не разбираюсь, но читал в разных статьях, что для приложений, где требуется точность, надо использовать числа с фиксированной запятой. Пример описан тут
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6225 / 2926 / 1046
Регистрация: 01.06.2021
Сообщений: 10,838
22.08.2023, 18:31
ram876, о точности можно говорит вечно

Тут совершенно верно сказали, что лучший вариант это реализация arbitrary-precision arithmetic.
В таком случае, теоретически можно неограниченно увеличивать machine precision, а практически пока не лопнет ОЗУ.

Например, в бесплатной СКА Maxima можно вычислять с любой машинной точностью.

Коммерческие СКА (например, Mathematica, Maple) пошли еще дальше. Они также реализовали n-digit precision. Т.е. там не нужно гадать, какая нужна машинная точность, чтобы все цифры после запятой были корректны. Пользователь требует от СКА, чтобы n-е количество цифр после запятой были корректны и он это получает, потому что СКА автоматически выбирает такую машинную точность, чтобы все цифры были корректны.

Но в n-digit precision есть нюансы:

Во-первых, даже самые крутые мат. пакеты не способны автоматически выбрать правильную машинную точность для вычислений некоторых выражений.

Например,

https://www.cyberforum.ru/cgi-bin/latex.cgi?1-\sqrt{1-{\mathrm e}^{-10000}}

Многие СКА не смогут автоматически подобрать правильную машинную точность, поэтому будут выдавать ответ 0.
Всё дело в том, что для того, чтобы получить как минимум одну корректную цифру "5" в ответе нужно иметь машинную точность 4343 (т.е. программа в своих вычислениях должна использовать 4343 значащих цифр).
При машинной точности 4346 мы уже получим 3 корректных цифры после запятой:
5,677 * 10^-4344

Во-вторых, на сегодняшний день не существует ни единого алгоритма, который бы гарантировал корректные n-цифр после запятой. Даже некоторые СКА предупреждают об этом. Например, в документации функции Mathematica N[expr,n] написано, что "attempts to give a result with n‐digit precision" - т.е. мол прога пытается это сделать, но не гарантирует.
Могут ли люди найти такой алгоритм, который бы гарантировал корректные n-цифр после запятой во всех случаях? Теоретически да, но сперва придется решить нерешенную zero-equivalence problem
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.08.2023, 19:05
Цитата Сообщение от Royal_X Посмотреть сообщение
zero-equivalence problem
Можно ссылку ?
Потому что звучит как : жопа не может найти голову.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6225 / 2926 / 1046
Регистрация: 01.06.2021
Сообщений: 10,838
22.08.2023, 20:00
SmallEvil, по этой теме было много статей в arXiv, но нужно искать.
Немного об этом упоминается в статье Википедии "List of undecidable problems", а также можно прочесть статью вики "Richardson's theorem".
А целом, zero-equivalence problem является частным случаем Constant problem (проблема постоянных). Только вот если некоторые случаи constant problem имеют решения, например, с помощью алгоритма Риша, то вот zero-equivalence problem является нерешенной проблемой матанализа.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.08.2023, 20:13
Цитата Сообщение от Сергей Игнатьев Посмотреть сообщение
Я занимаюсь астрономическими расчетами, где для обеспечения максимальной точности вычисления орбит путем интегрирования уравнений движения по времени требуется очень высокая разрядность действительных переменных. Та же проблема возникает, например при численном решении "задачи трех тел". С некоторыми моими результатами можно ознакомиться в моих темах. Для меня это вопрос не праздный, а имеющий прикладное значение.
Меня прежде всего интересует сколько значащих десятичных цифр можно использовать в мантиссе. например в double используется 16 значащих цифр, а мне нужно минимум 29. Порядок числа может быть от +/- 127. Что бы Вы могли порекомендовать, какую версию или публикацию, буду весьма благодарен.
Почитайте ещё вот тут:
https://www.cyberforum.ru/blog... g3523.html
там внизу говорится о том, что порядок равно приоритетных операций в выч-технике, влияет на сохранение значимости, в отличие от идеальной математики. Для ряда случаев, кстати - можно использовать мою программку, чтобы посмотреть как изменяется дерево оптимальных по порядку вычислений в зависимости от конкретных значений переменных формулы. Так что это прожка не только для школьников - LaTeX генерить. Она может понравиться и самым младшеньким. Научным сотрудникам)
зы. Но скорость работы в режиме оптимизации крайне низка. Это инструмент для выявления слабых мест расчётной схемы. Однако, можно выяснив интервалы, где дерево "брыкается", для каждого интервала создать специализированные функции, где скобками и порядком следования делается, то что требует дерево. Тут нужно побыть немного друидом)
0
22.08.2023, 21:40

Не по теме:

Цитата Сообщение от Royal_X Посмотреть сообщение
с помощью алгоритма Риша, то вот zero-equivalence problem является нерешенной проблемой матанализа.
Не увилвай, либо уже знаешь о чем говоришь, либо не упоминай.

0
22.08.2023, 22:16

Не по теме:

Сергей Игнатьев,
Ты же по паскалю специалист.
Зачем тебе C++.?
Да ещё большие числа в нём...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.08.2023, 22:16
Помогаю со студенческими работами здесь

С какой версии VS появился Double Buffered
в шейстой ее нет ? так как ставил dubblebuffere=true ниче не помогло Кто ставил реально ли она изабвляет от мерцания image box ? и...

Чем различаются long long и long double?
long long или long double

Вывод на экран числа long long double средствами printf
Необходима помощь. Как все же вывести через printf long long double (tbyte) конструкция виснет. времени особо нет разбираться ...

Почему перестает работать программа при замене double на long double?
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...

Как правильно преобразовать double в long double в программе на Qt Creator?
Я пишу программу на Qt Creator 4.12.2 . У меня происходит считывание числовых значений из текстового файла: double dval1, dval2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru