Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для radiofan
4 / 3 / 1
Регистрация: 18.04.2018
Сообщений: 53

Портирование программы использующую std::complex и boost::multiprecision::number на Emscripten

20.06.2024, 09:09. Показов 8647. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте, столкнулся с проблемой. Реализация Emscripten <complex> отличается от GNU <complex>. Emscripten <complex> содержит множество проверок в реализациях математических операций (https://github.com/emscripten-... #L624-L658). Эти функции вызывают свои std аналоги (https://github.com/emscripten-... #L595-L598). boost::multiprecision имеет свои реализации этих функций, но их реализация не добавляется в std.

Существует ли возможность добавить эти функции в std так, чтобы <cmath> их видел?

Программа (с попыткой добавить функции в std):
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
31
32
33
34
35
36
37
38
39
#include <stdlib.h>
#include <iostream>
 
#include <boost/multiprecision/cpp_dec_float.hpp>
 
using Number = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16U, std::int16_t>>;
 
namespace std{
    constexpr bool isnan(const Number& __x){
        return boost::multiprecision::isnan(__x);
    }
    constexpr bool isinf(const Number& __x){
        return boost::multiprecision::isinf(__x);
    }
}
 
#include <complex>
using ComplexType = std::complex<Number>;
 
 
int main(int, char*[]){
    Number a{ "1.2" };
    Number b{ "5.56" };
    Number c{ 1.25 };
    Number d{ -5 };
 
    ComplexType c_a{5};
    ComplexType c_b{5, -6};
    ComplexType c_c{-2.5, c};
 
    std::cout   << "c_a + c_c = " << (c_a + c_c) << std::endl
                 << "c_b - c_c = " << (c_b - c_c) << std::endl
                 << "c_b * c_c = " << (c_b * c_c) << std::endl
                 << "c_c / c_b = " << (c_c / c_b) << std::endl
                 << "abs(c_c) = " << std::abs(c_c) << std::endl
                 << "exp(c_b) = " << std::exp(c_b) << std::endl;
//;
    return 0;
}
Добавлено через 2 минуты
Ошибка компиляции:
Code
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
[1/2] Building CXX object CMakeFiles/multiprecision.dir/main.cpp.obj
FAILED: CMakeFiles/multiprecision.dir/main.cpp.obj 
/home/user/emsdk/upstream/emscripten/em++ -DBOARD_WEB -I/home/user/examples/multiprecision/build/Debug -I/home/user/examples/multiprecision/math-precision/include -I/home/user/examples/multiprecision/zerobasic/include -isystem /home/user/.conan2/p/boost0e71b73da677f/p/include -stdlib=libc++ -g -std=c++23 -v -sUSE_SDL=2 -sUSE_BOOST_HEADERS=1 -fsanitize=address -MD -MT CMakeFiles/multiprecision.dir/main.cpp.obj -MF CMakeFiles/multiprecision.dir/main.cpp.obj.d -o CMakeFiles/multiprecision.dir/main.cpp.obj -c /home/user/examples/multiprecision/main.cpp
 "/home/user/emsdk/upstream/bin/clang++" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/home/user/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -isystem /home/user/emsdk/upstream/emscripten/cache/sysroot/include/SDL2 -DBOOST_ALL_NO_LIB -Xclang -iwithsysroot/include/compat -DBOARD_WEB -I/home/user/examples/multiprecision/build/Debug -I/home/user/examples/multiprecision/math-precision/include -I/home/user/examples/multiprecision/zerobasic/include -isystem /home/user/.conan2/p/boost0e71b73da677f/p/include -stdlib=libc++ -g3 -std=c++23 -v -fsanitize=address -MD -MT CMakeFiles/multiprecision.dir/main.cpp.obj -MF CMakeFiles/multiprecision.dir/main.cpp.obj.d -c /home/user/examples/multiprecision/main.cpp -o CMakeFiles/multiprecision.dir/main.cpp.obj
clang version 19.0.0git (https:/github.com/llvm/llvm-project bc9823cf60bf91cc8b45248c4205cd2c67b2a3d5)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /home/user/emsdk/upstream/bin
 (in-process)
 "/home/user/emsdk/upstream/bin/clang-19" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu generic -fvisibility=hidden -debug-info-kind=constructor -dwarf-version=4 -debugger-tuning=gdb -fdebug-compilation-dir=/home/user/examples/multiprecision/build/Debug -v -fcoverage-compilation-dir=/home/user/examples/multiprecision/build/Debug -resource-dir /home/user/emsdk/upstream/lib/clang/19 -dependency-file CMakeFiles/multiprecision.dir/main.cpp.obj.d -MT CMakeFiles/multiprecision.dir/main.cpp.obj -sys-header-deps -isystem /home/user/emsdk/upstream/emscripten/cache/sysroot/include/SDL2 -isystem /home/user/.conan2/p/boost0e71b73da677f/p/include -D EMSCRIPTEN -D BOOST_ALL_NO_LIB -D BOARD_WEB -I /home/user/examples/multiprecision/build/Debug -I /home/user/examples/multiprecision/math-precision/include -I /home/user/examples/multiprecision/zerobasic/include -isysroot /home/user/emsdk/upstream/emscripten/cache/sysroot -internal-isystem /home/user/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /home/user/emsdk/upstream/lib/clang/19/include -internal-isystem /home/user/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /home/user/emsdk/upstream/emscripten/cache/sysroot/include -std=c++23 -fdeprecated-macro -ferror-limit 19 -fsanitize=address -fno-sanitize-memory-param-retval -fsanitize-address-use-after-scope -fsanitize-address-globals-dead-stripping -fno-assume-sane-operator-new -fgnuc-version=4.2.1 -fno-implicit-modules -fskip-odr-check-in-gmf -fcxx-exceptions -fignore-exceptions -fexceptions -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o CMakeFiles/multiprecision.dir/main.cpp.obj -x c++ /home/user/examples/multiprecision/main.cpp
clang -cc1 version 19.0.0git based upon LLVM 19.0.0git default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/home/user/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/home/user/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
 /home/user/examples/multiprecision/build/Debug
 /home/user/examples/multiprecision/math-precision/include
 /home/user/examples/multiprecision/zerobasic/include
 /home/user/emsdk/upstream/emscripten/cache/sysroot/include/SDL2
 /home/user/.conan2/p/boost0e71b73da677f/p/include
 /home/user/emsdk/upstream/emscripten/cache/sysroot/include/compat
 /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1
 /home/user/emsdk/upstream/lib/clang/19/include
 /home/user/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
In file included from /home/user/examples/multiprecision/main.cpp:2:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/iostream:43:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/ios:223:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__locale:16:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__mutex/once_flag.h:21:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/tuple:272:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/compare:145:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/compare_partial_order_fallback.h:13:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/partial_order.h:14:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/weak_order.h:14:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/strong_order.h:20:
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:597:10: error: no matching function for call to 'isinf'
  597 |   return std::isinf(__lcpp_x);
      |          ^~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/complex:636:26: note: in instantiation of function template specialization 'std::__constexpr_isinf<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>, 0>' requested here
  636 |     bool __z_inf  = std::__constexpr_isinf(__a) || std::__constexpr_isinf(__b);
      |                          ^
/home/user/examples/multiprecision/main.cpp:35:32: note: in instantiation of function template specialization 'std::operator*<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>>' requested here
   35 |                                  << "c_b * c_c = " << (c_b * c_c) << std::endl
      |                                                            ^
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:71:87: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'float' for 1st argument
   71 | _LIBCPP_NODISCARD_EXT inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isinf(float __x) _NOEXCEPT {
      |                                                                                       ^     ~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:76:1: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'double' for 1st argument
   76 | isinf(double __x) _NOEXCEPT {
      | ^     ~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:80:87: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'long double' for 1st argument
   80 | _LIBCPP_NODISCARD_EXT inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isinf(long double __x) _NOEXCEPT {
      |                                                                                       ^     ~~~~~~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:61:80: note: candidate template ignored: requirement 'is_arithmetic<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short, void>, boost::multiprecision::et_on>>::value' was not satisfied [with _A1 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>]
   61 | _LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isinf(_A1 __x) _NOEXCEPT {
      |                                                                                ^
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:66:80: note: candidate template ignored: requirement 'is_arithmetic<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short, void>, boost::multiprecision::et_on>>::value' was not satisfied [with _A1 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>]
   66 | _LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isinf(_A1) _NOEXCEPT {
      |                                                                                ^
In file included from /home/user/examples/multiprecision/main.cpp:2:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/iostream:43:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/ios:223:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__locale:16:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__mutex/once_flag.h:21:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/tuple:272:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/compare:145:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/compare_partial_order_fallback.h:13:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/partial_order.h:14:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/weak_order.h:14:
In file included from /home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__compare/strong_order.h:20:
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:583:10: error: no matching function for call to 'isnan'
  583 |   return std::isnan(__lcpp_x);
      |          ^~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/complex:639:28: note: in instantiation of function template specialization 'std::__constexpr_isnan<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>, 0>' requested here
  639 |         !__z_inf && ((std::__constexpr_isnan(__a) && std::__constexpr_isnan(__b)) ||
      |                            ^
/home/user/examples/multiprecision/main.cpp:35:32: note: in instantiation of function template specialization 'std::operator*<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>>' requested here
   35 |                                  << "c_b * c_c = " << (c_b * c_c) << std::endl
      |                                                            ^
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:98:87: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'float' for 1st argument
   98 | _LIBCPP_NODISCARD_EXT inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isnan(float __x) _NOEXCEPT {
      |                                                                                       ^     ~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:103:1: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'double' for 1st argument
  103 | isnan(double __x) _NOEXCEPT {
      | ^     ~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:107:87: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'long double' for 1st argument
  107 | _LIBCPP_NODISCARD_EXT inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isnan(long double __x) _NOEXCEPT {
      |                                                                                       ^     ~~~~~~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:88:80: note: candidate template ignored: requirement 'is_floating_point<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short, void>, boost::multiprecision::et_on>>::value' was not satisfied [with _A1 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>]
   88 | _LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isnan(_A1 __x) _NOEXCEPT {
      |                                                                                ^
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__math/traits.h:93:80: note: candidate template ignored: requirement 'is_integral<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short, void>, boost::multiprecision::et_on>>::value' was not satisfied [with _A1 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>]
   93 | _LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool isnan(_A1) _NOEXCEPT {
      |                                                                                ^
In file included from /home/user/examples/multiprecision/main.cpp:5:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/cpp_dec_float.hpp:33:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/number.hpp:12:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/generic_interconvert.hpp:12:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/default_ops.hpp:15:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/fpclassify.hpp:16:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/math/special_functions/fpclassify.hpp:18:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/math/special_functions/math_fwd.hpp:27:
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/complex:669:13: error: no matching function for call to '__constexpr_copysign'
  669 |       __a = std::__constexpr_copysign(std::__constexpr_isinf(__a) ? _Tp(1) : _Tp(0), __a);
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~
/home/user/examples/multiprecision/main.cpp:35:32: note: in instantiation of function template specialization 'std::operator*<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>>' requested here
   35 |                                  << "c_b * c_c = " << (c_b * c_c) << std::endl
      |                                                            ^
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:614:54: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'float' for 1st argument
  614 | _LIBCPP_CONSTEXPR inline _LIBCPP_HIDE_FROM_ABI float __constexpr_copysign(float __x, float __y) _NOEXCEPT {
      |                                                      ^                    ~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:618:55: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'double' for 1st argument
  618 | _LIBCPP_CONSTEXPR inline _LIBCPP_HIDE_FROM_ABI double __constexpr_copysign(double __x, double __y) _NOEXCEPT {
      |                                                       ^                    ~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:623:1: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'long double' for 1st argument
  623 | __constexpr_copysign(long double __x, long double __y) _NOEXCEPT {
      | ^                    ~~~~~~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:631:1: note: candidate template ignored: requirement 'std::is_arithmetic<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short, void>, boost::multiprecision::et_on>>::value' was not satisfied [with _A1 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>, _A2 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>]
  631 | __constexpr_copysign(_A1 __x, _A2 __y) _NOEXCEPT {
      | ^
In file included from /home/user/examples/multiprecision/main.cpp:5:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/cpp_dec_float.hpp:33:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/number.hpp:12:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/generic_interconvert.hpp:12:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/default_ops.hpp:15:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/fpclassify.hpp:16:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/math/special_functions/fpclassify.hpp:18:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/math/special_functions/math_fwd.hpp:27:
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/complex:670:13: error: no matching function for call to '__constexpr_copysign'
  670 |       __b = std::__constexpr_copysign(std::__constexpr_isinf(__b) ? _Tp(1) : _Tp(0), __b);
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:614:54: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'float' for 1st argument
  614 | _LIBCPP_CONSTEXPR inline _LIBCPP_HIDE_FROM_ABI float __constexpr_copysign(float __x, float __y) _NOEXCEPT {
      |                                                      ^                    ~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:618:55: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'double' for 1st argument
  618 | _LIBCPP_CONSTEXPR inline _LIBCPP_HIDE_FROM_ABI double __constexpr_copysign(double __x, double __y) _NOEXCEPT {
      |                                                       ^                    ~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:623:1: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'long double' for 1st argument
  623 | __constexpr_copysign(long double __x, long double __y) _NOEXCEPT {
      | ^                    ~~~~~~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:631:1: note: candidate template ignored: requirement 'std::is_arithmetic<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short, void>, boost::multiprecision::et_on>>::value' was not satisfied [with _A1 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>, _A2 = boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>]
  631 | __constexpr_copysign(_A1 __x, _A2 __y) _NOEXCEPT {
      | ^
In file included from /home/user/examples/multiprecision/main.cpp:5:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/cpp_dec_float.hpp:33:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/number.hpp:12:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/generic_interconvert.hpp:12:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/default_ops.hpp:15:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/multiprecision/detail/fpclassify.hpp:16:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/math/special_functions/fpclassify.hpp:18:
In file included from /home/user/.conan2/p/boost0e71b73da677f/p/include/boost/math/special_functions/math_fwd.hpp:27:
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/complex:672:15: error: no matching function for call to '__constexpr_copysign'
  672 |         __c = std::__constexpr_copysign(_Tp(0), __c);
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~
/home/user/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/cmath:614:54: note: candidate function not viable: no known conversion from 'boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<16, short>>' to 'float' for 1st argument
  614 | _LIBCPP_CONSTEXPR inline _LIBCPP_HIDE_FROM_ABI float __constexpr_copysign(float __x, float __y) _NOEXCEPT {
      |                                                      ^                    ~~~~~~~~~
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2024, 09:09
Ответы с готовыми решениями:

boost\multiprecision\cpp_int.h pp, вывод большого числа
Подключил boost\multiprecision\cpp_int.hpp для того, чтобы сохранить в переменную огромное число и вывести в консоли. При int выводился 0,...

Как слинковать boost/multiprecision/cpp_int.hpp?
Всем привет. Сразу скажу, с boost`ом никогда не работал, а тут понадобился тип данных, который мог бы хранить 128-ый числа. Вот и...

Динамический массив std::complex
Я решаю задачу с использованием комплексных чисел (FFT итп) Я хотел воспользоваться шаблонами std::complex для них есть множество...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2024, 09:09
Помогаю со студенческими работами здесь

Int number = 2; Console.WriteLine(++number - number-- * ++number); Выводит -6; Как ?
Знающие, объясните, пожалуйста. Каким чудом тут получается -6 ? O_o int number = 2; Console.WriteLine(++number - number-- *...

Ошибка undefined reference to `operator<<(std::ostream&, Complex const
Добрый вечер. Помогите, пожалуйста. Выдает ошибку, не понимаю что нужно сделать. Для main.cpp #include&quot;Pair.h&quot; ...

Как заполнить массив комплексными числами, не используя стандартный класс std::complex<double>?
Короче, дана структура. Как заполнить массив комплексными числами, не используя стандартный класс std::complex&lt;double&gt;. struct...

Boost::any and std::function
#include &lt;iostream&gt; #include &lt;typeinfo&gt; #include &lt;functional&gt; #include &lt;boost/any.hpp&gt; struct Foo { void bar() { ...

Конфликты boost и std
Доброго времени суток. Пишу проект с использованием сторонних либ boost и mysql-connector-c. При сборке возникает гора ошибок, например...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru