43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 444
1

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

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

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

Неверные результаты выражений c++
Столкнулся с такой проблемой, есть выражение:...

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

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

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

8
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
01.09.2020, 19:56 2
Micro, почитайте повнимательнее представление чисел в компьютере.
Тогда самостоятельно поймете причину.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.09.2020, 20:25 3
Не помню как С# но 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
Сообщений: 444
01.09.2020, 20:38  [ТС] 4
я читал, смотрел видео даже по этой теме.
но в данном случае я не пойму почему в калькуляторе одно значение а в программе другое.
еще момент что в х32 и х64 выводит разные значения, хотя размер 8 байт и там и там
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
01.09.2020, 20:47 5
Micro, почитай про https://ru.wikipedia.org/wiki/... ей_запятой и https://ru.wikipedia.org/wiki/... й_точности

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

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

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

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

А вот КАК надо - зависит от задачи. Колись давай.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.09.2020, 21:35 8
Цитата Сообщение от 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
Сообщений: 444
01.09.2020, 21:40  [ТС] 9
я сейчас пробую библиотеку от boost
вроде результат нужный
0
01.09.2020, 21:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2020, 21:40
Помогаю со студенческими работами здесь

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

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

Использование функции 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 как Х, то...

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

Pow: нет перегруженной функции
Ошибка 2 error C2661: pow: нет перегруженной функции, принимающей 1...

Вычислить S=2n, без функции pow()
Пишу прямо,нужно проверить решение:) Вычислить S=2^n, не используя функцию pow(). Добавлено...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru