Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802

Точность float & double

29.07.2021, 19:35. Показов 10785. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли повысить точность вычислений в C++.
С помощью cout.precision() получил то, что на скрине, но все равно точны 7 знаков после запятой для float и 15 знаков для double. Кроме того, как еще увеличить количество знаков после запятой (precision после 53 не работает).
Миниатюры
Точность float & double  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2021, 19:35
Ответы с готовыми решениями:

Почему точность Double такая же как у Float ?
Вначале столкнулся с проблемой float: time=65536.0f; (можно и больше число указать) time+=0.003; Тут time не меняетя! Оно меняется,...

Создать функцию с параметрами GetFunctionValue(double& a, double& b, double& c, double& x)...
Есть код что считает нужно сделать пару манипуляций что у не могу реализовать 1) создать функцию с параметрами...

Реализовать в виде GetFunctionValue(double& a, double& b, double& c, double& x)
Реализовать в виде GetFunctionValue(double& a, double& b, double& c, double& x). Задание по которому написан код внизу на фото ...

37
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
31.07.2021, 20:02
Студворк — интернет-сервис помощи студентам
На википедии отлично расписаны диапазоны и точность этих двух типов.

Добавлено через 3 минуты
Цитата Сообщение от Замабувараев Посмотреть сообщение
Если вам нужны точные вычисления в рациональных числах, то вместо float и double используйте структуру rational, эмулирующую натуральную дробь с числителем и знаменателем. В качестве числителя и знаменателя берём либо стандартные целые int, либо какой‐нибудь big_integer. Переопределяем математические операторы для такого типа данных — и вульваля! тип rational будет точным.
большинство вычичлений почти сразу переводят рациональное число в иррациональное которое не может быть описанно делителем /знаменателем, так что курит не крути а мирится с точностью придется

Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Плавающие типы в компьютере являются двоичными. Разговаривать об их абстрактной точности можно только в терминах количества двоичных знаков.
это абсолютно не правда

Добавлено через 3 минуты
Цитата Сообщение от Заполнен Посмотреть сообщение
Я сам новичок, но что пришло в голову, так это ручная реализация длинной арифметики.
да, если нужна большая точность, таки да, но необязательно писать велосипеды, хоть и можно, их достаточно
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
31.07.2021, 22:28
Цитата Сообщение от SmallEvil Посмотреть сообщение
это абсолютно не правда
почему? Что ты вообще сказать-то хотел?
Цитата Сообщение от SmallEvil Посмотреть сообщение
На википедии отлично расписаны диапазоны и точность этих двух типов.
дюже интересно и что же там говорится про диапазон и точность?
вот например, я очень точно сохранил во флоате 40 десятичных знаков. Что это, Википедия врёт?
C++
1
2
3
    float f = 195312505639804308097963648346383974400.000000f;
    printf("%f\n", f);
    printf("195312505639804308097963648346383974400.000000\n");
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.08.2021, 05:24
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Что это, Википедия врёт?
википедия говорит про точность мантисы и експоненты , не знаешь что ето иди в первый класс

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
почему? Что ты вообще сказать-то хотел?
почему ? точность плавающих типов не абстрактна, ни в коем случае !!

Добавлено через 25 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
float f = 195312505639804308097963648346383974400. 000000f; printf("%f\n", f); printf("19531250563980430809796364834638 3974400.000000\n");
отключи оптимизацию и увидишь здравый смысл. не проверял но почти уверен
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
01.08.2021, 06:25
SmallEvil, ржака просто. Оказывается оптимизация влияет на функцию printf! Что ещё скажешь смешного?

Добавлено через 6 минут
- Плавающие типы в компьютере являются двоичными. Разговаривать об их абстрактной точности можно только в терминах количества двоичных знаков.
- точность плавающих типов не абстрактна, ни в коем случае !!

ну если же флоат хранит ровно N неабстрактных десятичных знаков после запятой, то почему он называется флоат?
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
01.08.2021, 09:12
Цитата Сообщение от SmallEvil Посмотреть сообщение
отключи оптимизацию и увидишь здравый смысл. не проверял но почти уверен
Нет, в его примере в другом прикол - в знании устройства дробных чисел, а не в оптимизации.
Цитата Сообщение от SmallEvil Посмотреть сообщение
почему ? точность плавающих типов не абстрактна, ни в коем случае !!
Я ничего не понял из этих разрозненных фраз.
Вы не согласны, что дробные числа представляются двоичными? Или что в рассуждениях об их точности без применения к конкретной задаче говорить можно только о количестве разрядов? А главное - почему и как исправить это утверждение чтобы оно было по-вашему верным?
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
01.08.2021, 11:18  [ТС]
Kuzia domovenok, мне кажется, что float хранит не ровно n цифр после запятой, а хранит 6-9 значащих цифр (significant digits), а если точнее , то float в C++ занимает 32 бита, из которых 23 бита идут на значащие цифра, 8 битов на экспоненту и 1 бит на знак. Так говорит стандарт IEEE 754 для float (binary32).
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
01.08.2021, 11:24
Цитата Сообщение от Royal_X Посмотреть сообщение
а если точнее , то float в C++ занимает 32 бита, из которых 23 бита идут на значащие цифра, 8 битов на экспоненту и 1 бит на знак. Так говорит стандарт IEEE 754 для float (binary32).
Об этом вам здесь и рассказвают.

С той стандартной оговоркой, что внутренне представление IEEE754 плавающих типов - двоичное. И сколько бы "десятичных значащих цифр" вам ни обещали, точно представить число 0.110, в котором всего одна значащая десятичная цифра, ни один из двоичных IEEE754 форматов не сможет.
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
01.08.2021, 11:27  [ТС]
TheCalligrapher, а я же не просил говорить об этом я же спрашивал, как выполнять в C++ точные расчеты (не обязательно нативными типами)

Добавлено через 54 секунды
Тут кто-то советовал создавать свою структуру - это уже ближе к моему вопросу.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
01.08.2021, 11:28
Цитата Сообщение от Royal_X Посмотреть сообщение
Тут кто-то советовал создавать свою структуру - это уже ближе к моему вопросу.
Вам уже ответили
Цитата Сообщение от Royal_X Посмотреть сообщение
Если нужно было считать, то использовал бы Wolfram Mathematica, которая умеет считать с точностью в миллионы - миллиарды знаков после запятой
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Если вы хотите в С++ "точностью в миллионы - миллиарды знаков после запятой", то вам придется делать то же самое, что делает Wolfram Mathematica
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
01.08.2021, 11:29  [ТС]
Croessmah, там вообще arbitrary precision, это очень сложная работа
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
01.08.2021, 11:32
Цитата Сообщение от Royal_X Посмотреть сообщение
там вообще arbitrary precision, это очень сложная работа
Если Вы хотите такое же, то придется проделать эту сложную работу.
Как вариант, можете посмотреть исходники gmp.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
01.08.2021, 11:43
Цитата Сообщение от Royal_X Посмотреть сообщение
я же спрашивал, как выполнять в C++ точные расчеты (не обязательно нативными типами)
Вам же ответили: в общем случае никак, поскольку есть такая штука, как иррациональные числа, которые с абсолютной точностью записать невозможно физически - ни в памяти компьютера, ни на бумаге.
Можно только задать определенную точность и пользоваться ей.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
01.08.2021, 11:50
Цитата Сообщение от Royal_X Посмотреть сообщение
я же спрашивал, как выполнять в C++ точные расчеты
Расчёты с конечной точностью или расчёты непосредственно сохранением всех значащих цифр? Если второе, то берёшь числа с длинной арифметикой (https://ru.wikipedia.org/wiki/Длинная_арифметика), реализуешь с их помощью класс обыкновенной дроби, и считаешь. Правда чем дольше будешь считать, тем больше будут числа и тем медленнее будут вычисления. Ну и конечно никаких вычислений логарифмов и квадратных корней - это иррациональные числа, их в виде дробей представлять можно только в очень редких случаях.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
01.08.2021, 12:47  [ТС]
TRam_, я писал не о символьных (аналитических) вычислениях, где все нужно хранить в виде дробей, мат.констант, логарифмов, тригонометрических, спец функций и т.д. - это будет очень сложно. Мне создавать систему компьютерной алгебры (CAS) не нужно.
Мне просто интересно, неужели нет простого способа получить, например, 50 значащих цифр sqrt(2) ?
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
01.08.2021, 13:02
Цитата Сообщение от Royal_X Посмотреть сообщение
неужели нет простого способа получить, например, 50 значащих цифр sqrt(2) ?
Нету.
Плюсы не кулькулятор.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
01.08.2021, 13:35
Royal_X, https://www.boost.org/doc/libs... _root.html
0
0 / 0 / 0
Регистрация: 01.08.2021
Сообщений: 7
01.08.2021, 14:28
если передавать из массива строк, то имплементируется булевое значение через атрибут импорта

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main() {
 char c;
 cout << "Enter a character: ";
 cin >> c;
 cout << "ASCII Value of " << c << " is " << int(c);
 return 0;
}
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
04.08.2021, 12:42
Цитата Сообщение от SmallEvil Посмотреть сообщение
большинство вычичлений почти сразу переводят рациональное число в иррациональное которое не может быть описанно делителем /знаменателем
Иррациональное число можно представить как многочлен с показателем степени из натуральной дроби, результат тоже будет точным.
А трансцендентные числа представлять в виде именованных констант, как в математике.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2021, 12:42

Реализовать в виде GetFunctionValue(double& a, double& b, double& c, double& x)
Реализовать в виде GetFunctionValue(double&amp; a, double&amp; b, double&amp; c, double&amp; x). #include &lt;iostream&gt; #include &lt;conio.h&gt; #pragma...

Реализовать в виде GetFunctionValue(double& a, double& b, double& c, double& x)
Реализовать в виде GetFunctionValue(double&amp; a, double&amp; b, double&amp; c, double&amp; x).

Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Ошибка невозможно преобразовать аргумент 1 из "float *" в "float (&&)
Кто может подсказать, что не так? list &lt;float&gt; listData; while (getline(in, line)) { char *s = new char; ...

Точность float
Объясните, пожалуйста,когда у числа типа float точность 7 цифр, а когда 8. Желательно с примером)Весь интернет облазил, ответ так и не...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru