Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2013, 20:39   #1
dim565
 
Регистрация: 04.11.2009
Сообщений: 6
Вопрос mod от числа считает ошибочно

Здравствуйте. Требуется находить остаток от деления огромного числа на другое небольшое число.

Вот набросок:
Код:
#include <vcl.h>
#include <math.h>
#include <iostream.h>
#pragma hdrstop
 double x,y;
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        x=55555555555555555;
        y=fmod(x,103);;
        cout<<ya;
}
Выводит 76.
Делаю тоже самое на калькуляторе Windows, выходит 79. Если x сделать на 2 разряда меньше - все совпадает.

Вообще планировал вычислять остаток от еще больших чисел, например 1,7e+84 и т.п. И всегда выходит ошибочное значение, тогда как калькулятор Win считает правильно
dim565 вне форума Ответить с цитированием
Старый 23.11.2013, 20:44   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Можете написать хоть 100 пятерок, все равно double - не точнее 15..16 значащих цифр.
type_Oleg вне форума Ответить с цитированием
Старый 23.11.2013, 21:21   #3
dim565
 
Регистрация: 04.11.2009
Сообщений: 6
По умолчанию

type_Oleg, есть ли какое-нибудь простое решение?
dim565 вне форума Ответить с цитированием
Старый 23.11.2013, 22:14   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Код:
unsigned __int64 x = 55555555555555555, y;
y = x % 103;
f.hump вне форума Ответить с цитированием
Старый 23.11.2013, 22:38   #5
dim565
 
Регистрация: 04.11.2009
Сообщений: 6
По умолчанию

.hump, спасибо, работает. А не знаете ли случайно, как теперь возводить в степень?
Пишу
Код:
x=pow(34,55);
при запуске ошибка 'Invalid floating point operation'
dim565 вне форума Ответить с цитированием
Старый 23.11.2013, 22:52   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

я рад, что работает, только надо понимать, что емкости u __int64 хватит только на числа меньше 10^19. для больших чисел простых решений нет.

и как правильно отметили даблы в данном случае ничем не помогают.

в случае с pow, возможно, ошибка вылазит из-за того, что результ возведения лежит вне разрешенного диапазона для u __int64, если х объявлен как u __int64.
f.hump вне форума Ответить с цитированием
Старый 24.11.2013, 09:18   #7
dim565
 
Регистрация: 04.11.2009
Сообщений: 6
По умолчанию

f.hump, спасибо, что доходчиво объяснили. Понял, что такая задачка лучше будет на другом языке программирования, например на Python, например
Код:
print (34 ** 55 % 105)
вычисляется на ура
dim565 вне форума Ответить с цитированием
Старый 24.11.2013, 12:41   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это потому что в Питоне длинная арифметика.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
M = b(a^x)^(-1) mod p hellsingXXX Общие вопросы Delphi 1 27.12.2011 13:52
a * a mod n NiCola999 Помощь студентам 3 18.12.2010 15:08
Деление a mod b Emperous Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.02.2010 21:10
программа Добавляет левые элементы в массив, и не считает числа входящие в условие! lutfi Общие вопросы C/C++ 1 12.12.2009 00:48
ошибка с mod Kn793 Помощь студентам 2 16.07.2008 13:28