Форум программистов, компьютерный форум CyberForum.ru

Для нечетных чисел начиная с 9743 неправильно возводит в степень - C++

Восстановить пароль Регистрация
 
~SERG
3 / 3 / 1
Регистрация: 06.08.2012
Сообщений: 26
13.01.2013, 18:08     Для нечетных чисел начиная с 9743 неправильно возводит в степень #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Для нечетных чисел начиная с 9743 неправильно возводит в степень
 // ответ на 1 меньше  почему?
#include<iostream>  
using std::cout;       
using std::endl;
using std::fixed; 
#include<cmath>
using std::pow;
#include<iomanip>
using std::setprecision;
 
 
    int main(){
    double x = 9743.0; 
 
    cout <<"\n\n 9743^4= "<< fixed << setprecision(0) <<  pow(x, 4.0) << endl; //неправильно
            
    cout <<"\n\n 9741^4= " << (9741.0 * 9741.0 *9741.0 * 9741.0) << endl;// считает  правильно
 
    cout <<"\n\n 9743^4= " << (9743.0 * 9743.0 *9743.0 * 9743.0) << endl;// неправильно 
    cout <<"\n\n 9797^4= " << (9797.0 * 9797 *9797 * 9797) << endl;// неправильно
    return 0;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 18:08     Для нечетных чисел начиная с 9743 неправильно возводит в степень
Посмотрите здесь:

C++ Возведение в степень по модулю для чисел близких к max long long
C++ Для чисел от -50 до 50 найти кол-во четных отрицательных и кол-во положительных нечетных чисел
Неправильно работает cout для чисел типа double и float C++
неправильно возводит в степень матрицу с++ C++
Написать программу для вычисления суммы факториалов всех нечетных чисел от 1 до 9. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,251
13.01.2013, 18:26     Для нечетных чисел начиная с 9743 неправильно возводит в степень #2
может из за округления? как я понял вы задали выводить без дробной части. если получается, например, 9,99 будет выведено 9. отладчиком смотрели сколько на самом деле там получается?
Искринний
 Аватар для Искринний
2 / 2 / 0
Регистрация: 02.02.2012
Сообщений: 36
13.01.2013, 19:58     Для нечетных чисел начиная с 9743 неправильно возводит в степень #3
я так понимаю числа целые зачем вы их как вещественные прописуете

И что вам нужно вычислить??
~SERG
3 / 3 / 1
Регистрация: 06.08.2012
Сообщений: 26
14.01.2013, 00:16  [ТС]     Для нечетных чисел начиная с 9743 неправильно возводит в степень #4
Я пытался найти решение великой теоремы Ферма x^n + y^n = z^n ( ^- стетень) Все числа - целые.
Если использовать тип int произойдет переполнение разрядной сетки:
INT_MAX = 2 147 483 647 <-- это мах для типа int
например: 9797^4 = 9 212 392 481 101 681,

поэтому использовал double. Никакой дробной части у чисел нету, Чтобы компилятор использовал разрядную
сетку типа double к целому числу добавил ЯКОБЫ дробную часть 9797.0
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,251
14.01.2013, 11:34     Для нечетных чисел начиная с 9743 неправильно возводит в степень #5
Цитата Сообщение от ~SERG Посмотреть сообщение
Никакой дробной части у чисел нету
проверил без округления - ответ такой же как у вас. действительно почему-то замыливает единицу...

Добавлено через 1 минуту
наверное от того что значащих цифр в ответе 16, а это - предел для double. вот оно в вблизи этой границы и начинает резать.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
14.01.2013, 12:09     Для нечетных чисел начиная с 9743 неправильно возводит в степень #6
~SERG, используйте длинную целую арифметику. Никакие встроенные типы вам не помогут. Они не заточены на великие теоремы.
Yandex
Объявления
14.01.2013, 12:09     Для нечетных чисел начиная с 9743 неправильно возводит в степень
Ответ Создать тему
Опции темы

Текущее время: 04:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru