Вывести точное значение функции pow () в c ++ - PullRequest
1 голос
/ 10 января 2020

enter image description here мой вывод идет неправильно. Я думаю, что я не так с кастингом. пожалуйста, помогите мне.

    int n;
    cin>>n;
    unsigned long long int a,s;
    cin>>a;
    s=(2*pow(10,n)+a);

Но когда я даю большие n как 17 или 18, тогда мой вывод, который равен s, идет не так, как ожидалось. см. изображение для вывода, например: когда n=17, a=67576676767676788, тогда s=267576676767676800, что в идеале должно быть 2*10^17 + 67576676767676788

1 Ответ

6 голосов
/ 10 января 2020

Сначала вы должны понять, что происходит.

  1. Чтобы использовать компилятор std :: pow , он выполняет автоматическое преобразование целочисленных типов в double и возвращаемое значение также double.
  2. Обратите внимание, что double имеет 16 значащих цифр (в десятичном представлении)
  3. Когда вы делаете присвоение, преобразование double в long long int выполняется без вывода сообщений
  4. unsigned long long int если этот тип имеет 64 бита, максимальная мощность 10 равна 19

Теперь, если вы превышаете это ограничение, вам следует использовать внешнюю библиотеку. gmp довольно хорошо.

Если допустимо ограничение из диапазона unsigned long long int, просто реализуйте свою собственную функцию мощности.

...