204
204
205
205
< p class ="text-right "> < small >
206
206
最終更新日時(UTC):
207
- < span itemprop ="datePublished " content ="2024-06-18T05:47:07 ">
208
- 2024年06月18日 05時47分07秒
207
+ < span itemprop ="datePublished " content ="2024-06-18T06:01:22 ">
208
+ 2024年06月18日 06時01分22秒
209
209
</ span >
210
210
< br />
211
211
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
230
230
231
231
< div class ="identifier-type "> function template</ div > < div class ="header "> <linalg></ div > < h1 itemprop ="name "> < span class ="namespace " title ="namespace std::linalg "> std::linalg::</ span > < span class ="token "> vector_two_norm</ span > < span class ="cpp cpp26 " title ="C++26で追加 "> (C++26)</ span > </ h1 >
232
232
< div itemprop ="articleBody "> < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="p "> {</ span >
233
- < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> in</ span > < span class ="o "> -</ span > < span class ="n "> vector</ span > < span class ="n "> InVec</ span > < span class ="p "> ,</ span >
234
- < span class ="k "> class</ span > < span class ="nc "> Scalar</ span > < span class ="o "> ></ span >
235
- < span class ="n "> Scalar</ span > < span class ="n "> vector_two_norm</ span > < span class ="p "> (</ span > < span class ="n "> InVec</ span > < span class ="n "> v</ span > < span class ="p "> ,</ span >
236
- < span class ="n "> Scalar</ span > < span class ="n "> init</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1)</ span >
233
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> in</ span > < span class ="o "> -</ span > < span class ="n "> vector</ span > < span class ="n "> InVec</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> Scalar</ span > < span class ="o "> ></ span >
234
+ < span class ="n "> Scalar</ span > < span class ="n "> vector_two_norm</ span > < span class ="p "> (</ span > < span class ="n "> InVec</ span > < span class ="n "> v</ span > < span class ="p "> ,</ span > < span class ="n "> Scalar</ span > < span class ="n "> init</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1)</ span >
237
235
238
236
< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> < a href ="../execution/execution/execution_policy.html "> ExecutionPolicy</ a > </ span > < span class ="p "> ,</ span >
239
237
< span class ="n "> in</ span > < span class ="o "> -</ span > < span class ="n "> vector</ span > < span class ="n "> InVec</ span > < span class ="p "> ,</ span >
240
238
< span class ="k "> class</ span > < span class ="nc "> Scalar</ span > < span class ="o "> ></ span >
241
239
< span class ="n "> Scalar</ span > < span class ="n "> vector_two_norm</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../execution/execution/execution_policy.html "> ExecutionPolicy</ a > </ span > < span class ="o "> &&</ span > < span class ="n "> exec</ span > < span class ="p "> ,</ span >
242
240
< span class ="n "> InVec</ span > < span class ="n "> v</ span > < span class ="p "> ,</ span >
243
- < span class ="n "> Scalar</ span > < span class ="n "> init</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2)</ span >
241
+ < span class ="n "> Scalar</ span > < span class ="n "> init</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2)</ span >
242
+
243
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> in</ span > < span class ="o "> -</ span > < span class ="n "> vector</ span > < span class ="n "> InVec</ span > < span class ="o "> ></ span >
244
+ < span class ="k "> auto</ span > < span class ="n "> vector_two_norm</ span > < span class ="p "> (</ span > < span class ="n "> InVec</ span > < span class ="n "> v</ span > < span class ="p "> );</ span > < span class ="c1 "> // (3)</ span >
245
+
246
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> < a href ="../execution/execution/execution_policy.html "> ExecutionPolicy</ a > </ span > < span class ="p "> ,</ span > < span class ="n "> in</ span > < span class ="o "> -</ span > < span class ="n "> vector</ span > < span class ="n "> InVec</ span > < span class ="o "> ></ span >
247
+ < span class ="k "> auto</ span > < span class ="n "> vector_two_norm</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../execution/execution/execution_policy.html "> ExecutionPolicy</ a > </ span > < span class ="o "> &&</ span > < span class ="n "> exec</ span > < span class ="p "> ,</ span > < span class ="n "> InVec</ span > < span class ="n "> v</ span > < span class ="p "> );</ span > < span class ="c1 "> // (4)</ span >
244
248
< span class ="p "> }</ span >
245
249
</ code > </ pre > </ div >
246
250
</ p >
@@ -249,21 +253,34 @@ <h2>概要</h2>
249
253
< ul >
250
254
< li > (1): 逐次実行する。</ li >
251
255
< li > (2): 指定された実行ポリシーに応じて実行する。</ li >
256
+ < li > (3): (1)で< code > init</ code > に< code > InVec::value_type</ code > のデフォルト値を与えて逐次実行する。</ li >
257
+ < li > (4): (2)で< code > init</ code > に< code > InVec::value_type</ code > のデフォルト値を与えて、指定された実行ポリシーに応じて実行する。</ li >
252
258
</ ul >
253
259
< h2 > < a class ="cpprefjp-defined-word " data-desc ="満たさなければプログラムが不適格となる要件。`static_assert`や関数のdelete宣言などに相当する "> 適格要件</ a > </ h2 >
254
260
< ul >
255
- < li > < code > decltype(init +< a href ="abs-if-needed.html "> abs-if-needed</ a > (declval<typename InVec::value_type>()) * abs-if-needed(declval<typename InVec::value_type>()))</ code > が< code > Scalar</ code > に変換可能。</ li >
261
+ < li > (1), (2): < code > decltype(init +< a href ="abs-if-needed.html "> abs-if-needed</ a > (declval<typename InVec::value_type>()) * abs-if-needed(declval<typename InVec::value_type>()))</ code > が< code > Scalar</ code > に変換可能。</ li >
262
+ </ ul >
263
+ < h2 > 効果</ h2 >
264
+ < ul >
265
+ < li > (3), (4): < code > T</ code > を< code > decltype(abs-if-needed(declval<typename InVec::value_type>()) * abs-if-needed(declval<typename InVec::value_type>()))</ code > とすると、</ li >
266
+ < li > (3): < code > vector_two_norm(v, T{})</ code > を返す。</ li >
267
+ < li > (4): < code > vector_two_norm(std::forward<ExecutionPolicy>(exec), v, T{})</ code > を返す。</ li >
256
268
</ ul >
257
269
< h2 > 戻り値</ h2 >
258
- < p > < code > n</ code > を< code > v</ code > の次元とすると、</ p >
270
+ < ul >
271
+ < li > (1), (2): < code > n</ code > を< code > v</ code > の次元とすると、以下の式の値を返す。</ li >
272
+ </ ul >
259
273
< p > $$
260
274
\sqrt{\sum_{i = 0}^{n - 1} |\verb|v[|i\verb|]||^2 + \verb|init|^2}
261
275
$$</ p >
262
- < p > を返す。</ p >
276
+ < ul >
277
+ < li > (3), (4): < code > T</ code > を< code > decltype(abs-if-needed(declval<typename InVec::value_type>()) * abs-if-needed(declval<typename InVec::value_type>()))</ code > とすると、</ li >
278
+ < li > (3): < code > vector_two_norm(v, T{})</ code > を返す。</ li >
279
+ < li > (4): < code > vector_two_norm(std::forward<ExecutionPolicy>(exec), v, T{})</ code > を返す。</ li >
280
+ </ ul >
263
281
< h2 > 備考</ h2 >
264
282
< ul >
265
- < li > < code > init.scaled_sum_of_squares</ code > は0以上でなければならない。</ li >
266
- < li > もし< code > InVec::value_type</ code > と< code > Scalar</ code > がどちらも浮動小数点数型または< code > std::complex</ code > の特殊化で、< code > Scalar</ code > が< code > InVec::value_type</ code > より精度が高い場合、和の各項は< code > Scalar</ code > またはより高い精度の型が使われる。</ li >
283
+ < li > (1), (2): もし< code > InVec::value_type</ code > と< code > Scalar</ code > がどちらも浮動小数点数型または< code > std::complex</ code > の特殊化で、< code > Scalar</ code > が< code > InVec::value_type</ code > より精度が高い場合、和の各項は< code > Scalar</ code > またはより高い精度の型が使われる。</ li >
267
284
</ ul >
268
285
< h2 > 例</ h2 >
269
286
< h3 > 出力</ h3 >
0 commit comments