[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 03/03 12:56 / Filesize : 271 KB / Number-of Response : 1015
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part130



1 名前:デフォルトの名無しさん(ワッチョイ f37a-QmV0) mailto:sage [2017/03/31(金) 08:47:49.65 ID:UkLjKqcm0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part129
echo.2ch.net/test/read.cgi/tech/1483940967/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

552 名前:デフォルトの名無しさん (ワッチョイ 9f32-LvKX) [2017/06/25(日) 14:15:18.57 ID:ogKde9930.net]
union aaa{
uint8_t byte[ 5 ];
struct bit_t {
uint32_t b0 : 5;
uint32_t b1 : 5;
uint32_t b2 : 5;
uint32_t b3 : 5;
uint32_t b4 : 5;
uint32_t b5 : 5;
uint32_t b6 : 5;
uint32_t b7 : 5;
}bit;
};
union bbb{
struct bit_t {
uint32_t b0 : 5;
uint32_t b1 : 5;
uint32_t b2 : 5;
uint32_t b3 : 5;
uint32_t b4 : 5;
uint32_t b5 : 5;
uint32_t b6 : 5;
uint32_t b7 : 5;
}bit;
uint8_t byte[ 5 ];
};
const aaa a = { 66, 77, 88, 99, 11 };
const bbb b = { a.bit.b0, a.bit.b1, a.bit.b2, a.bit.b3, a.bit.b4, a.bit.b5, a.bit.b6, a.bit.b7 };
bが{66,77,88,35,11}となってaと一致しません。何故ですか

553 名前:デフォルトの名無しさん (ワッチョイ f796-Cfyt) mailto:sage [2017/06/25(日) 15:01:36.01 ID:WDBvKZ4J0.net]
byte境界でないと配置できない環境なんじゃないの?

554 名前:デフォルトの名無しさん (ワッチョイ 9f32-MYey) mailto:sage [2017/06/25(日) 15:16:55.26 ID:vsjTFzMZ0.net]
uint32_tに5ビットずつ詰めてるからだろ

555 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/25(日) 15:37:16.30 ID:ogZvFgu/0.net]
普通は単に unsigned b0:5: と書くべき
ビットフィールドに32tとか余計なモノ乗っけると解釈がおかしくなる

556 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/25(日) 15:41:35.21 ID:ogZvFgu/0.net]
あとは副作用でpackアラインが1になってないから無理矢理境界作ってコンパイラが揃えようとしているとか

557 名前:デフォルトの名無しさん (ワッチョイ bfe4-Nep8) mailto:sage [2017/06/25(日) 15:51:48.24 ID:k9VtfbZw0.net]
共用体の統一初期化記法のことはよくわからないけどちゃんとコンストラクタを書けば解決するのでは
https://wandbox.org/permlink/Fzd26GrwxkCJ5NmL

558 名前:デフォルトの名無しさん (ワッチョイ ffaa-4OJu) mailto:sage [2017/06/25(日) 16:07:57.97 ID:Y80WzbX30.net]
C++を、10年以上勉強してから、共用体を使え

そもそも、初心者が使い道を知らないだろ

559 名前:デフォルトの名無しさん (ワッチョイ 9fc3-NIhq) mailto:sage [2017/06/25(日) 17:09:07.72 ID:/94nlHOp0.net]
>>546
なぜ一致すると思うのかをまず説明すべきではないかね?

560 名前:デフォルトの名無しさん (ワッチョイ 1f91-ZLad) mailto:sage [2017/06/25(日) 17:14:35.54 ID:CENP8UyG0.net]
99: 1100011
35: _100011
何度かやってみると、合う時もあるな



561 名前:デフォルトの名無しさん (ワッチョイ 9f32-LvKX) [2017/06/25(日) 19:00:42.60 ID:ogKde9930.net]
uint32_tをuint64_tに変えたら一致するようになりました
ヒントになります?

562 名前:デフォルトの名無しさん (ワッチョイ 9faf-6L/r) mailto:sage [2017/06/25(日) 19:15:35.89 ID:0WoCYScE0.net]
VC++2015で調べたらaaa,bbbは8byteでbit_tのメンバーは

b0: 0ビット目
b1: 5ビット目
b2: 10ビット目
b3: 15ビット目
b4: 20ビット目
b5: 25ビット目
b6: 32ビット目
b7: 37ビット目

に配置されてた
b6から配置がずれてて30bit目と31bit目がbit_tでは使われてない
なのでbでbit_tを使って初期値をセットしてもこの2bitの値は不定になる
この2bitが両方とも0の時4byte目は35、
30bit目が0で31bit目が1の時99になる

563 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f15-LvKX) mailto:sage [2017/06/25(日) 23:08:48.14 ID:y0reYziw0.net]
英語を読むのがだるいので JIS の仕様を見てみた。
まずは C99 (に相当する JISX3010:2003) の 6.7.2.1 にはこうある。

> 処理系は、ビットフィールドを保持するに十分な大きさの任意のアドレス付け可能な記憶域単位を割り付けてよい。
> 十分な領域が残っている場合、構造体内のビットフィールドの直後に続く別のビットフィールドは、同じ単位の隣接したビットに詰め込まなければならない。
> 十分な領域が残っていない場合、入り切らなかったビットフィールドを次の単位に入れるか、又は隣接した単位の境界をまたがせるかは、処理系定義とする。
> 単位内のビットフィールド割付けの順序 (上位から下位か又は下位から上位か) は、処理系定義とする。

この理屈にてらして >>556 を解釈すると、 VC++2015 での記憶域単位は 4 バイトで、ビットフィールドが単位に収まらなかった場合には次の単位に入れる
という選択を取っていることになる。

で、 C++03 (JISX3014:2003) ではどうかというと 9.6 にこうある。

> クラスオブジェクト内のビットフィールドの割り当て方は処理系定義とする。 ビットフィールドの境界調整は、処理系定義とする。 ビットフィールドは、何らかのアドレス取得可能な単位内に詰め込まれる。
> 参考 処理系によっては、ビットフィールドの割当て単位をまたがることもあるし、またがないこともある。 右から左に割り当てる処理系もあるし、左から右に割り当てる処理系もある。

この文章の「単位内に詰め込まれる」というのは C での規則にあるように記憶域単位をまたがない限り (次の単位に移らずに) 詰め込むという規則にも読
めるが、ちょっとよくわからない。 常識的に考えれば C より緩い規則ということはないだろうと思うんだけど……。

>>555
指定する型が割当て方に影響するような文面は見付けられなかった。

564 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/25(日) 23:47:54.19 ID:Tfx4tn9Gr.net]
>常識的に考えれば (中略) ないだろうと思う

訳:ボクは非常識です

565 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:18:40.72 ID:mZAJ/HXWd.net]
トンチンカンな回答がほとんどで笑える

566 名前:デフォルトの名無しさん (ワッチョイ bfe4-Nep8) mailto:sage [2017/06/26(月) 00:21:57.68 ID:yL9hwVgE0.net]
正しい回答をお願いします

567 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:29:03.33 ID:mZAJ/HXWd.net]
byteの40bitとbの40bitが違う位置だから (ほとんどの環境で)

568 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:32:01.19 ID:mZAJ/HXWd.net]
8個のbがbyteをカバーしていない

569 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:37:21.07 ID:mZAJ/HXWd.net]
>>547>>552
回答するレベルじゃない
何も書かない方がマシ

570 名前:デフォルトの名無しさん (ワッチョイ bfe4-Nep8) mailto:sage [2017/06/26(月) 01:00:43.63 ID:yL9hwVgE0.net]
そもそも専門的な質問は2chで聞くべきじゃないし
信頼できる専門書を買うべき



571 名前:デフォルトの名無しさん (ワッチョイ ffaa-4OJu) mailto:sage [2017/06/26(月) 01:09:10.53 ID:RgMKiEkv0.net]
共用体などは、C++を、10年以上勉強してから使え。
そもそも、初心者が使い道を知らないだろ

そもそも、5バイトは、40ビットだけど、
ビットフィールドが何バイトの領域に確保されるかも知らないのに、使うな。
処理系依存の機能を使うな

MISRA-C でも使用禁止だし、素人が使う共用体なんて、
バグだらけで製品で使えない

どの本にも、共用体を使った例など、載っていないだろ

572 名前:デフォルトの名無しさん (ワッチョイ 9f89-RNzd) mailto:sage [2017/06/26(月) 01:26:24.49 ID:YVNj3DlL0.net]
>>565
質問者はただの学習目的かもしれんのに、
素人だとか製品では〜とか批判するのは的外れだろう

573 名前:デフォルトの名無しさん (ワッチョイ 374b-ckEx) mailto:sage [2017/06/26(月) 01:34:20.4 ]
[ここ壊れてます]

574 名前:7 ID:jY+d4s2A0.net mailto: >>560
すでに言われてるがまとめると>>546の状況では先頭から
byteは連続する40bit
bit_tは使わない2bitをはさんだ42bit
を使用するのでbyte-bit_t間では
余分なbitの取得・必要なbitの欠落が起きて完全な情報のやりとりにならない
[]
[ここ壊れてます]

575 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/26(月) 01:50:32.70 ID:/d8dR7Ut0.net]
5bitづつだとどうしてもアドレス跨ぎが発生するからな
4bitづつなら収まるけど

576 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/26(月) 08:14:37.12 ID:g/kuRdPjr.net]
>信頼できる専門書を買うべき

ここは信頼できる回答が示されていても日本語が読めない低能が不毛なレスを続ける所なのだが
その典型例が>>560ということに本人が気付くことは無いのであった

577 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/26(月) 20:30:39.48 ID:g/kuRdPjr.net]
そう言えば規格的には>>546の使い方はNGなので
>>552が言っていることはあながち間違いでもない

578 名前:デフォルトの名無しさん (ワッチョイ 9f1b-ZNvc) mailto:sage [2017/06/26(月) 20:36:59.50 ID:cFoP2i7u0.net]
規格的には処理系定義なので処理系のマニュアル等で確認して使うならNGではないな

579 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/26(月) 20:43:43.05 ID:GM19K0OY0.net]
>>552は質問の回答じゃないから

580 名前:デフォルトの名無しさん (ワッチョイ ffaa-4OJu) [2017/06/26(月) 23:25:57.41 ID:RgMKiEkv0.net]
共用体で、バイト配列とビットフィールドは、互換性がない型だから使えない。
最低でも、10年以上勉強していない者は、共用体でバグだらけになるから使うな

ビットフィールドのメモリ割付位置は、処理系依存だから、
他のOS・OSのビット数(32/64ビット)・他のコンパイラなどで使えない

また、コンパイラのバージョンアップで、再コンパイルするだけでも、
メモリ割付位置は変わるから、バグ有りで使えない

コンパイルエラーにならず、実行時エラーになるようなものは使えない



581 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/26(月) 23:35:53.83 ID:GM19K0OY0.net]
なんかムキになってる
相変わらずズレてるね

582 名前:デフォルトの名無しさん (ワッチョイ 9faa-ZLad) mailto:sage [2017/06/26(月) 23:55:54.69 ID:NfcBoQUW0.net]
失敗を通じてしか成長できないのにね

583 名前:デフォルトの名無しさん (ワッチョイ bfea-WW2k) mailto:sage [2017/06/27(火) 01:00:05.96 ID:NwZhdH240.net]
10年以上勉強さん流石ですw

584 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 08:01:35.53 ID:bJ//gE7J0.net]
10年勉強して >>573
残念な人

585 名前:デフォルトの名無しさん (ワッチョイ d7d1-Rbtz) mailto:sage [2017/06/27(火) 10:18:29.05 ID:XwCnx1+f0.net]
for_eachを並列で高速化する場合
-D_GLIBCXX_PARALLEL
でopenmp使う場合と
#include <experimental/numeric>
の使う場合と
どっちが高速なの?

586 名前:デフォルトの名無しさん (ワッチョイ 17f3-PFpe) [2017/06/27(火) 10:35:07.84 ID:TVfTial50.net]
自分でも無意識のうちにやってたし、ネットのサンプルとかでもよくあるけど
厳密にはunsigned intのほうが相応しい場合でもintつかってるコードをよく見かけるが
いちいちintをunsigned intで宣言し直すのもあほらしいしマクロつかって
unsigned intを_u_intとかに置き換えて宣言するのもそこまでしなくてもいいんじゃないかとも思うし
そこらへんはテキトーでいいんっすかね・・・

587 名前:デフォルトの名無しさん (スッップ Sdbf-iOY8) mailto:sage [2017/06/27(火) 10:51:53.32 ID:LPANs+0ed.net]
std::size_t じゃなくて?

588 名前:デフォルトの名無しさん (ワッチョイ d76f-ADZD) mailto:sage [2017/06/27(火) 11:30:31.53 ID:DL/1tDv80.net]
負の値を取らないからって「厳密にはunsigned intのほうが相応しい」とは俺は考えないな
intで済むならintにする

589 名前:デフォルトの名無しさん (ワッチョイ f7ea-LvKX) mailto:sage [2017/06/27(火) 12:25:58.18 ID:+aQQjqLh0.net]
正の数しかとらない変数がまだ初期化されていないことを明示するために負の値(特に-1)を使うとか割とよくある。

590 名前:デフォルトの名無しさん (スッップ Sdbf-iOY8) mailto:sage [2017/06/27(火) 14:22:30.38 ID:Gpx2Satod.net]
>>581
・仕様として正の整数
・intの範囲で表せる
が成り立つならintにする?

自分ならstd::size_tを選ぶなあ

>>582
そんな需要があるとはちょっと不思議だ。クラスメンバ?



591 名前:デフォルトの名無しさん (ワッチョイ 1f91-ZLad) mailto:sage [2017/06/27(火) 14:33:30.02 ID:ntBitUxx0.net]
int? i;
が許されるのはC#だっけ?

592 名前:デフォルトの名無しさん (ワンミングク MM7f-Rrwd) mailto:sage [2017/06/27(火) 14:41:42.08 ID:siPR+sC7M.net]
そもそもアドレス宣言と初期化は同時にしろって話だしね

593 名前:デフォルトの名無しさん (ワンミングク MM7f-Rrwd) mailto:sage [2017/06/27(火) 14:41:58.86 ID:siPR+sC7M.net]
アドレス宣言ってなんだ
宣言ね

594 名前:デフォルトの名無しさん (ワッチョイ d76f-ADZD) mailto:sage [2017/06/27(火) 15:11:12.82 ID:DL/1tDv80.net]
>>583
std::size_tの本来の用途じゃない数値でも使つのか?それはちょっと

595 名前:デフォルトの名無しさん (スッップ Sdbf-iOY8) mailto:sage [2017/06/27(火) 16:00:23.87 ID:Gpx2Satod.net]
>>587
ああごめん、もともとは>>579
「 厳密にはunsigned intのほうが相応しい場合でも」
に反応しての発言だった。

596 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 19:00:49.27 ID:bJ//gE7J0.net]
>>583
size_tだと64bit環境で64bitになるぞ

597 名前: ◆QZaw55cn4c (ワッチョイ 576d-frAY) mailto:sage [2017/06/27(火) 19:02:17.31 ID:kIT2/xtQ0.net]
int が 64ビットになるべきだよね

598 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 19:07:21.81 ID:bJ//gE7J0.net]
当然そういうコンパイラはある
Windows上だと過去の色々なしがらみなどからintが32bitなのが普通

599 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) mailto:sage [2017/06/27(火) 19:08:30.52 ID:OA/PxRyod.net]
ビット数が気になるなら、<cstdint>のint??_tやuint??_tを使えばいいやんけ。

600 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 19:09:53.97 ID:bJ//gE7J0.net]
厳密にはunsignedの方が相応しいってどういう場合を想定してる?

データサイズとかならunsignedの方が相応しいとも限らないよ



601 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 19:11:35.74 ID:bJ//gE7J0.net]
>>592
そういう問題じゃない
言語のデフォルトサイズ、一番効率が良いとされているサイズが32bitなのか64bitなのか
の問題

602 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) mailto:sage [2017/06/27(火) 19:15:41.98 ID:OA/PxRyod.net]
その場合はintfast_t, uintfast_tを使う

603 名前:デフォルトの名無しさん (ワッチョイ bfe4-Nep8) mailto:sage [2017/06/27(火) 19:19:52.85 ID:N0WooBY/0.net]
データが持つ意味と型の振る舞いは極力一致させるべきで
型の振る舞いはできる限り制限するべき
負の値を取り得ないならunsignedにする
ローカル変数ならsignedでもいい

604 名前: ◆QZaw55cn4c (ワッチョイ 576d-frAY) mailto:sage [2017/06/27(火) 19:30:07.19 ID:kIT2/xtQ0.net]
>>591
え?そんなコンパイラが実在するの?

605 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) mailto:sage [2017/06/27(火) 19:33:33.64 ID:OA/PxRyod.net]
>>597
64-bit Linuxとか使ったことねーのか?

606 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) mailto:sage [2017/06/27(火) 19:37:05.21 ID:OA/PxRyod.net]
>>598
ごめんなさい。

607 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 19:51:35.91 ID:bJ//gE7J0.net]
特殊な例だとcharからlong longまで全部64bitとかあるぞ
もちろんPCではないけど

608 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 19:52:40.24 ID:bJ//gE7J0.net]
こいつが噂のMZか
一人芝居の

609 名前:デフォルトの名無しさん (アウアウウー Sa9b-h10b) [2017/06/27(火) 20:06:34.19 ID:3pUMWgYLa.net]
>>594
言語つーかCPUに依存しないか。
Core2は64ビット対応でも32ビットのが速い。
64ビットが速いのはCore iからとか。

610 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 20:10:45.68 ID:bJ//gE7J0.net]
x86の64bitモードは32bitの方が速い命令がある
キャッシュ容量とかメモリ帯域とかを考えても、絶対に32bitで足りるなら、32bitを選んだ方がいい



611 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/27(火) 21:37:34.10 ID:ExZegnFlr.net]
>こいつが噂のMZか
>一人芝居の

Qの一人芝居はまだ余興として見られるがもう一人のクソコテの一人芝居は痛々しくて見ていられない

612 名前:デフォルトの名無しさん (ワッチョイ 9fc3-NIhq) mailto:sage [2017/06/28(水) 02:28:02.75 ID:Irk2C7ZK0.net]
>>596
型の振る舞いをできる限り制限するのは誤りを起こさない、起こしても明確なエラーにするのが目的だと思うんだけど、
符号なし整数型にそういった機能は無くて実際の助けにはならないから、こういう議論が起こる。

613 名前:デフォルトの名無しさん (ワッチョイ d76f-ADZD) mailto:sage [2017/06/28(水) 04:29:23.47 ID:matoew650.net]
むしろsignedにしておけば不正に負の値が入れられた場合チェックしやすい

614 名前:デフォルトの名無しさん (ワッチョイ 9f89-RNzd) mailto:sage [2017/06/28(水) 07:46:44.59 ID:Aii/VoAq0.net]
符合つき整数との比較や算術演算した際に、warning出たり符合なしに変換されたりと面倒なことが多いから、定義域が非負という理由だけではわざわざ符合なしにはあまりしたくない。

615 名前:デフォルトの名無しさん (スプッッ Sd3f-oVeJ) [2017/06/28(水) 08:16:59.41 ID:MovvcuP9d.net]
googleのスタイルだと整数は符号ありを使えってなってる

616 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/28(水) 13:11:58.44 ID:4LULrFdtd.net]
APIも64bitは符号ありが多い

617 名前:デフォルトの名無しさん (ワッチョイ 7f91-fiUu) [2017/06/28(水) 14:24:20.43 ID:qTRul81R0.net]
Vvector<vector<float>> tensor;
のようなテンソルを、1列にまとめて
void Vector_Func(vector<float> &v){}
ベクトルの関数の引数にしたいんだけどさ
これって、新たにVector<float>型のベクトルを定義してそこにベクトルの中身をコピーし、それを利用して関数を呼び出して、さらにもとのテンソルにコピーして戻すしかないのかな?
2度のコピーにかかる時間を短縮できる方法があったら誰か教えて!!!

618 名前:デフォルトの名無しさん (ワッチョイ bfaf-7LQj) mailto:sage [2017/06/28(水) 14:26:13.68 ID:+YCVI2Ik0.net]
typedef vector<vector<float> > tensorf;
それとも右辺値参照的な話だろうか

619 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/28(水) 14:29:19.59 ID:eX7vr1Kz0.net]
参照になっているなら直接vを弄るだけでコピーする必要もないと思われ

620 名前:デフォルトの名無しさん (ワッチョイ d76f-ADZD) mailto:sage [2017/06/28(水) 15:12:35.77 ID:matoew650.net]
>>610
1列にまとめる必要があるという前提ならどうしようもない気がする
vector<vector<float>>を止めてデータの並びが最初から1列にまとまってるようなテンソルクラスを作るか、
どっかの行列ライブラリを転用するんだな



621 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/28(水) 16:00:31.95 ID:eX7vr1Kz0.net]
参照渡しでvが正常に得られるということは、vectorが値の参照を許容しているとも言える。

622 名前:デフォルトの名無しさん (ワンミングク MM7f-Rrwd) mailto:sage [2017/06/28(水) 16:46:10.90 ID:cWs7iztoM.net]
>>610
iteratorパターンかrange viewのようなものを作る

623 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/28(水) 18:00:52.06 ID:lG20CtJar.net]
612は健常者

624 名前: ◆QZaw55cn4c (ワッチョイ 179a-jSYe) mailto:sage [2017/06/28(水) 22:05:12.76 ID:y88Z2FQA0.net]
>>598
その64bit Linux に乗っているコンパイラは何?

625 名前:デフォルトの名無しさん (ササクッテロラ Sp71-kiAr) [2017/06/29(木) 22:16:27.01 ID:3dQByb1op.net]
C++の数値計算のコード読んでくとreadmeにSiam journal って雑誌の引用見かける事がやたら多いんだけどc++やる人は必読の雑誌だったりします?

626 名前:デフォルトの名無しさん (ワッチョイ 016f-bKJX) mailto:sage [2017/06/30(金) 01:47:04.93 ID:66+xb1tk0.net]
C++ってより言語を問わず数値計算やる人だな
高速性が要求される数値計算はC++が使われることが多いってだけ

627 名前:デフォルトの名無しさん (ワッチョイ 46e4-ejav) mailto:sage [2017/06/30(金) 01:56:16.60 ID:/WxXdso/0.net]
まず数学力を鍛えたほうがいい

628 名前:デフォルトの名無しさん (オッペケ Sr71-F+4p) mailto:sage [2017/06/30(金) 08:34:53.69 ID:2shJEbz+r.net]
これがアスペというやつだな

629 名前:デフォルトの名無しさん (ワッチョイ 921b-zTMA) mailto:sage [2017/07/01(土) 07:18:19.26 ID:C6ffpB7m0.net]
式テンプレートを勉強中です。
X(i) op Y(i)だけで結果が決まる場合はともかく
行列の逆行列のような一要素の計算に行列全部が影響するような計算を
こいつで実装する意味ってありまつか?
実装例とかあったら教えてください

630 名前:デフォルトの名無しさん (ワッチョイ 06af-D66J) mailto:sage [2017/07/01(土) 07:25:20.19 ID:qtP/3v2i0.net]
意味というか行列の逆行列のij成分はij余因子を行列式で割った値だと言うことを知っていれば
NxN行列の逆行列の各成分はij余因子行列である(N-1)x(N-1)行列の行列式の計算になるから
数学的帰納法的にテンプレート化可能



631 名前:デフォルトの名無しさん (ワッチョイ 42aa-wjSU) mailto:sage [2017/07/01(土) 07:49:52.59 ID:nS8nnQe50.net]
>>623
君は説明がうまいね

632 名前:デフォルトの名無しさん (ワッチョイ 06af-D66J) mailto:sage [2017/07/01(土) 08:05:35.58 ID:qtP/3v2i0.net]
いやそれほどでも・・・///

633 名前:デフォルトの名無しさん (ワッチョイ 42aa-wjSU) mailto:sage [2017/07/01(土) 08:28:19.10 ID:nS8nnQe50.net]
式テンプレートで正項と負項をバサッと消し合うようなことができないかと考えて挫折したなあ

634 名前:デフォルトの名無しさん (ワッチョイ 921b-zTMA) mailto:sage [2017/07/01(土) 08:44:48.56 ID:C6ffpB7m0.net]
>>623
いや、その余因子を求めることも、そこから行列式を求めるにも、全行列値が必要になるわけだし、
そもそも、余因子行列式の計算はNxN->3x3までの変換が再帰的な計算でスタックを使いたおすことになるので、
ヒープに一時オブジェクトを使わずにすむといという式テンプレートのメリットが全くないんじゃないんですか?

だいたい余因子行列式の除算なんて効率悪すぎて数値計算じゃ使いませんよ。
話をはっきりさせるために、ここは逆行列計算をGauss-Jordanの掃き出し法に限定しましょうや。

>数学的帰納法的にテンプレート化可能
どういう意味です?

数学的帰納法とは、
i=1のときf(1)が成立する
i=nのときf(n)が成立すると仮定すれば
i=n+1のときも成立することを証明して、一般的にf(n)が成立とする

635 名前:デフォルトの名無しさん (ワッチョイ 921b-zTMA) mailto:sage [2017/07/01(土) 09:09:28.46 ID:C6ffpB7m0.net]
>>626
ちょっと、誤解を招きかねないんで、
余因子行列式が再帰的云々と書きましたが、
余因子に限らず、行列式の計算そのものが再帰的という意味です。
だから、行列式計算そのものがやたら時間がかかる。
大学の試験の答案とかで、途中点をかせぐために(連立方程式を解いて計算間違いするより加点が期待できる)、
余因子行列式/行列式
を明記したりしますが、このやり方はせいぜい手計算でできる4x4程度の話で、
それ以上だと掃き出し法に比較して極端に非効率ということです。

636 名前:デフォルトの名無しさん (オッペケ Sr71-F+4p) mailto:sage [2017/07/01(土) 09:32:16.00 ID:T5yR4indr.net]
>>627
>効率悪すぎて数値計算じゃ使いませんよ
「式テンプレートの勉強」を「汎用数値計算ライブラリを式テンプレート化するための勉強」にすりかえられても…

>どういう意味です?
ヒント:回答者は日本語を正しく使えない

637 名前:デフォルトの名無しさん (ワッチョイ 42aa-wjSU) mailto:sage [2017/07/01(土) 10:10:34.74 ID:nS8nnQe50.net]
再帰的に→帰納的に→帰納法的に
jk

638 名前:デフォルトの名無しさん (ワッチョイ 0111-WwN4) mailto:sage [2017/07/01(土) 12:42:17.52 ID:RfHKhQjf0.net]
数学用語はよくわからんけど
>行列の逆行列のような一要素の計算に行列全部が影響するような計算を
>こいつで実装する意味ってありまつか?
ない

というか式テンプレート勉強するというなら自分で軽く実装してみるべきだよ
↑の場合は速度がどうこう以前の問題だとわかるから

639 名前:デフォルトの名無しさん (オッペケ Sr71-F+4p) mailto:sage [2017/07/01(土) 13:26:13.77 ID:T5yR4indr.net]
>再帰的に→帰納的に
これはひどい
再帰的と帰納的は関係ないし、数学的帰納法は帰納的でも帰納法でもない

>>こいつで実装する意味ってありまつか?
>ない
確かに質問に対する明確な回答なのだが、何かこう足りないような…

640 名前:デフォルトの名無しさん (スッップ Sd62-TIEP) mailto:sage [2017/07/05(水) 14:15:27.50 ID:/9Xtn5yvd.net]
scanfより速い標準入力ってない?
スペース区切りの大量のintをベクトルにいれたいんだけどループ回してscanfがどうやっても最速なのかな



641 名前:デフォルトの名無しさん (ワッチョイ 6e1c-4/kT) [2017/07/05(水) 15:44:26.17 ID:4h6UtxrL0.net]
istream_iterator<int> first(cin), last;
vector<int> wish_of_632{first, last};

642 名前:デフォルトの名無しさん (スッップ Sd62-TIEP) mailto:sage [2017/07/05(水) 16:39:36.49 ID:/9Xtn5yvd.net]
>>634
試してみるサンクス

643 名前:デフォルトの名無しさん (オッペケ Sr71-F+4p) mailto:sage [2017/07/05(水) 16:59:04.15 ID:UhWlQCq1r.net]
Visual Studio 2017のリリースビルドで試したが>>634 の方法は倍ほど遅いような

644 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) mailto:sage [2017/07/05(水) 17:16:22.28 ID:2aUA7xnEd.net]
fread, fgets, getchar

645 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) mailto:sage [2017/07/05(水) 17:22:18.00 ID:2aUA7xnEd.net]
int n = 0;
if ('0' <= ch && ch <= '9') {
n *= 10;
n += ch - '0';
} else {
put_int(n);
n = 0;
}

646 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) mailto:sage [2017/07/05(水) 17:31:38.49 ID:2aUA7xnEd.net]
GetStdHandle(STD_INPUT_HANDLE)

647 名前:デフォルトの名無しさん (ワッチョイ c2f0-wjSU) mailto:sage [2017/07/05(水) 18:03:51.31 ID:IVGCprss0.net]
大量=一行10000個程度の数字が10000行ほど?

648 名前:デフォルトの名無しさん (オッペケ Sr71-F+4p) mailto:sage [2017/07/05(水) 18:09:07.25 ID:UhWlQCq1r.net]
自前が最速なのだろうが汎用性を考えるとお勧めできない

ある環境での適当な100万個の整数読み込み時間:
 istream_iterator : 470ms
 scanf : 230ms
 fgetc+自前スペース解析+atoi :
175ms
 最初に全部char配列に読み込み+片山式パース: 32ms

649 名前:デフォルトの名無しさん (ワッチョイ 46e4-ejav) mailto:sage [2017/07/05(水) 19:23:43.26 ID:rZavNuQl0.net]
何のチェックもしないscanf,printfのやり方が最速なのは自明

650 名前:デフォルトの名無しさん (ワッチョイ 6111-wjSU) mailto:sage [2017/07/05(水) 20:06:49.25 ID:tZeoWZVY0.net]
>>641
>最初に全部char配列に読み込み+片山式パース:

これって随分早いけどパースより読み込みが効いてるんじゃないの
恐らくfgets使ってるんだよね



651 名前:デフォルトの名無しさん (オッペケ Sr71-F+4p) mailto:sage [2017/07/05(水) 20:09:41.12 ID:UhWlQCq1r.net]
>>643
fgetsでなくfreadで読んだ
なおこの全読み込み方式で数値の切り出しをatoiにすると80msだったので
やはりI/Oの効率化が支配的と理解した

652 名前:デフォルトの名無しさん (ワッチョイ 6111-wjSU) mailto:sage [2017/07/05(水) 21:04:30.49 ID:tZeoWZVY0.net]
>>644
てことは
fgetc+自前スペース解析+atoi :175ms
fread++自前スペース解析+atoi :80ms
読み込みのオーバーヘッドで175-80=95msロスしてるわけか

atoiは変換不能文字とか16進とかチェックしてるからその分遅くなるんだろう
自前で10進のみに特化させるのが一番なんだけどもな






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef