Функция MPIR fmod?

мой текущий проект использует MPIR для произвольной точности точек с плавающей точкой.
Я хочу рассчитать Fmod двух поплавков. Если я пытаюсь скомпилировать свой код, я получаю ошибку, из которой я не могу разобраться.

>C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(2392): error C2665: '__gmp_binary_modulus::eval' : none of the 7 overloads could convert all the argument types
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(615): could be 'void __gmp_binary_modulus::eval(mpz_ptr,mpz_srcptr,mpz_srcptr)'
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(618): or       'void __gmp_binary_modulus::eval(mpz_ptr,mpz_srcptr,mpir_ui)'
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(620): or       'void __gmp_binary_modulus::eval(mpz_ptr,mpir_ui,mpz_srcptr)'
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(638): or       'void __gmp_binary_modulus::eval(mpz_ptr,mpz_srcptr,mpir_si)'
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(642): or       'void __gmp_binary_modulus::eval(mpz_ptr,mpir_si,mpz_srcptr)'
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(653): or       'void __gmp_binary_modulus::eval(mpz_ptr,mpz_srcptr,double)'
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(660): or       'void __gmp_binary_modulus::eval(mpz_ptr,double,mpz_srcptr)'
1>          while trying to match the argument list '(__gmp_resolve_expr<mpf_t>::ptr_type, mpf_srcptr, mpf_srcptr)'
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(2392) : while compiling class template member function 'void __gmp_expr<T,U>::eval(__gmp_resolve_expr<mpf_t>::ptr_type,mpir_ui) const'
1>          with
1>          [
1>              T=mpf_t,
1>              U=__gmp_binary_expr<__gmp_expr<mpf_t,mpf_t>,__gmp_expr<mpf_t,mpf_t>,__gmp_binary_modulus>
1>          ]
1>          C:\Users\Heurazio\Documents\Visual Studio 2012\Projects\Projektarbeit\Projektarbeit\libs\mpir\x64\Debug\mpirxx.h(2305) : see reference to function template instantiation 'void __gmp_expr<T,U>::eval(__gmp_resolve_expr<mpf_t>::ptr_type,mpir_ui) const' being compiled
1>          with
1>          [
1>              T=mpf_t,
1>              U=__gmp_binary_expr<__gmp_expr<mpf_t,mpf_t>,__gmp_expr<mpf_t,mpf_t>,__gmp_binary_modulus>
1>          ]
1>          TestCases\MPIR\F_F\TC_MPIR_F_F_MOD_01_A.cpp(34) : see reference to class template instantiation '__gmp_expr<T,U>' being compiled
1>          with
1>          [
1>              T=mpf_t,
1>              U=__gmp_binary_expr<__gmp_expr<mpf_t,mpf_t>,__gmp_expr<mpf_t,mpf_t>,__gmp_binary_modulus>
1>          ]

Мой код:

this->t = this->n[0] % this->n[1];

Я также пытался

this->t = fmod(this->n[0], this->n[1]);

и выдох с большим количеством функций mpir, все с одинаковым результатом.

где переменные

mpf_class* n;
mpf_class t;

Если я проверяю перегрузку оператора%, я не вижу появления «%». Можно ли получить fmod из двух переменных mpf_class? Если да, можете ли вы дать мне подсказку, как?

заранее спасибо
Alex

0

Решение

Вы не можете использовать оператор% со значениями с плавающей запятой в C ++.

Вы должны использовать fmod, как вы предлагаете выше.

-1

Другие решения


По вопросам рекламы [email protected]