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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
#1

Почему так работает, а так нет? - C++

09.02.2009, 16:49. Просмотров 656. Ответов 5
Метки нет (Все метки)

так работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Возведение b в степень s по модулю m
float powmod(float b, long s)
{
  float c=1;
 
  while (s) {
    if (s%2==0) {
      s /= 2;
       b *= b; 
      }
    else {
      s--;
       c *= b; 
      }
  }
  return c;
}
 
float main(void)
{
 
  float b = 2;
  long s =39;
 
  printf ("%f\n",powmod(b, s));
 
  return 0;
}
а так - нет...а нужны именно инты...что делать? Помогите, плиз!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
// Возведение b в степень s по модулю m
unsigned int powmod(unsigned int b, unsigned int s)
{
  unsigned int c=1;
 
  while (s) {
    if (s%2==0) {
      s /= 2;
       b *= b; 
      }
    else {
      s--;
       c *= b; 
      }
  }
  return c;
}
 
unsigned int main(void)
{
 
  unsigned int b = 2;
  unsigned int s =39;
 
  printf ("%f\n",powmod(b, s));
 
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2009, 16:49     Почему так работает, а так нет?
Посмотрите здесь:

Объясните почему так C++
C++ Почему так странно работает калькулятор
C++ Подскажите почему так?
почему это так работает C++
Почему функция работает именно так? C++
При компилировании компилятор вылетает,нет ли ошибок, или почему он так? C++
C++ Почему так?
Почему так? C++
C++ While и for, почему так?
C++ Не понимаю, что не так, почему не работает
C++ Почему цикл работает не так, как ожидается?
C++ Почему при вводе элементов массива, программа прекращает работу или работает не так, как ожидается?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YurA_280784
Заблокирован
09.02.2009, 16:55     Почему так работает, а так нет? #2
Потому что ты в строке
C++
1
printf ("%f\n",powmod(b, s));
пишешь преобразовывать в %f - float как я гляжу 2-й вариант возвращает UINT, напиши спецификатор формата другой - %d вот и всё...
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
09.02.2009, 16:59  [ТС]     Почему так работает, а так нет? #3
нет, дело не в этом, это просто опечатка. В первом варианте выводит правильное число, а во втором - ноль
Gravity
557 / 551 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
09.02.2009, 17:13     Почему так работает, а так нет? #4
У тебя элементарно не хватает места в переменной, чтобы записать такое большое число. Ты посчитай на калькуляторе сколько получится при 2^39 и сравни размер инта.
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
09.02.2009, 17:18  [ТС]     Почему так работает, а так нет? #5
все, я поняла - просто очень большое число получается, не влазит в тип int. Сорри за беспокойство - спасибо!!
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.02.2009, 01:02     Почему так работает, а так нет? #6
C++
1
2
3
4
5
6
       else {  
           s--;  
           c *= b;   
       }  
   }  
   return c;
в этом моменте когда степень двойки вылазит за край, c становится равно нулю и всё и дальше ноль умножается на всё остальное
для больших степеней double (float тоже может не потянуть, а результат будет ещё непредсказуемее)
Yandex
Объявления
10.02.2009, 01:02     Почему так работает, а так нет?
Ответ Создать тему
Опции темы

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