С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445

Неверные результаты функции std::pow

01.09.2020, 19:42. Показов 1252. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возвожу число 3 в степен 54 и получаю
Code
1
58149737003040055362584576
C++
1
std::cout << std::fixed << std::powl(3, 54) << std::endl;
В калькулятор, питоне, C# выдает
Code
1
58149737003040059690390169
В чем проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2020, 19:42
Ответы с готовыми решениями:

Неверные результаты выражений c++
Столкнулся с такой проблемой, есть выражение: 0.4*((4−10)*(4−20))/((0−10)*(0−20))​​ +0.3*((4−0)*(4−20))/((10−0)*(10−20))...

при вызове функции pow() выдаёт ошибку: test.cpp:(.text+0x59b): undefined reference to `pow'
В чём дело? Добавлено через 1 минуту ps. Заголовок math.h подключен.

Число Фибоначчи и рекурсия: код выдает неверные результаты
Функция возвращает значение типа int, принимает 2 переменных типа int и 1 типа bool. Первая переменная - номер числа из ряда Фибоначчи...

8
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
01.09.2020, 19:56
Micro, почитайте повнимательнее представление чисел в компьютере.
Тогда самостоятельно поймете причину.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.09.2020, 20:25
Не помню как С# но Python там вроде как длинная арифметика из коробки.

Добавлено через 3 минуты
Но тем не менее

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cmath>
 
 
int main()
{
    std::cout << std::fixed << std::pow(3, 54) << std::endl;
 
    return 0;
}
Выводит
58149737003040063952519168.000000

https://onlinegdb.com/r1p0mb37w
0
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
01.09.2020, 20:38  [ТС]
я читал, смотрел видео даже по этой теме.
но в данном случае я не пойму почему в калькуляторе одно значение а в программе другое.
еще момент что в х32 и х64 выводит разные значения, хотя размер 8 байт и там и там
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
01.09.2020, 20:47
Micro, почитай про https://ru.wikipedia.org/wiki/... ей_запятой и https://ru.wikipedia.org/wiki/... й_точности

Добавлено через 55 секунд
И да, если тебе требуется именно точное целое значение, работай с целыми числами, а не с плавающей точкой. Если что, почитай про циклы.

Добавлено через 37 секунд
В 64 разряда точное число 3^54 не поместится, к сожалению...

Добавлено через 3 минуты
Так что только изучать длинную арифметику.
0
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
01.09.2020, 20:49  [ТС]
в C# есть класс BigInteger из System.Numeric, там все правильно считается.
а в обычном приложении С++ на 64 архитектуре другие числа выдает.

по сути я пытаюсь сделать алгоритм диффи хелмана из видео https://www.youtube.com/watch?v=vFjq9pID4-E
0
Злостный нарушитель
 Аватар для Verevkin
10249 / 5676 / 1262
Регистрация: 12.03.2015
Сообщений: 26,309
01.09.2020, 20:59
C++
1
long double powl( long double base, long double exp );
метод powl() использует числа с плавающей точкой. Я в сам алгоритм не заглядывал, но думаю, что там есть цикл, в результате которого неизбежно накапливается погрешность. Не делай так.

А вот КАК надо - зависит от задачи. Колись давай.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.09.2020, 21:35
Цитата Сообщение от Micro Посмотреть сообщение
в C# есть класс BigInteger из System.Numeric, там все правильно считается.
а в обычном приложении С++ на 64 архитектуре другие числа выдает.
В С++ есть библиотека mpir (gmp)

Добавлено через 2 минуты
Касательно почему так ... так уже сказали - точности не хватает, читай https://neerc.ifmo.ru/wiki/ind... 0%B5%D0%BB
0
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
01.09.2020, 21:40  [ТС]
я сейчас пробую библиотеку от boost
вроде результат нужный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2020, 21:40
Помогаю со студенческими работами здесь

Передача функции указатель на элемент std::vector<std::string>
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...

std::async std::future и функции-члены
как в async передать функцию-член нужного мне обьекта класса? С простыми функциями получилось, а вот тут засада. Заранее спасибо за...

Вопрос по функции POW
есть 2 переменные double first; unsigned int second; Хочу сделать pow (second, first); Компилятор ругается : IntelliSense:...

Использование функции pow
int x,z,h; z=38; cin&gt;&gt;x; h=pow(z,x); cout&lt;&lt;h; getch(); если даю 1,2,3,4,5,6 как Х, то программа работает, если даю больше 10,...

Pow не работает в функции
void gip(int &amp;a, int &amp;d); int main() {int a,d; cin&gt;&gt;a; gip(a,d); _getch(); return 0; }


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru