мой текущий проект использует 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
Вы не можете использовать оператор% со значениями с плавающей запятой в C ++.
Вы должны использовать fmod, как вы предлагаете выше.