[過去ログ] C++相談室 part130 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
553: (ワッチョイ 1f91-ZLad) 2017/06/25(日)17:14 ID:CENP8UyG0(1) AAS
99: 1100011
35: _100011
何度かやってみると、合う時もあるな
554
(1): (ワッチョイ 9f32-LvKX) 2017/06/25(日)19:00 ID:ogKde9930(2/2) AAS
uint32_tをuint64_tに変えたら一致するようになりました
ヒントになります?
555
(1): (ワッチョイ 9faf-6L/r) 2017/06/25(日)19:15 ID:0WoCYScE0(1) AAS
VC++2015で調べたらaaa,bbbは8byteでbit_tのメンバーは

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

に配置されてた
省4
556: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f15-LvKX) 2017/06/25(日)23:08 ID:y0reYziw0(1) AAS
英語を読むのがだるいので JIS の仕様を見てみた。
まずは C99 (に相当する JISX3010:2003) の 6.7.2.1 にはこうある。

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

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

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

> クラスオブジェクト内のビットフィールドの割り当て方は処理系定義とする。 ビットフィールドの境界調整は、処理系定義とする。 ビットフィールドは、何らかのアドレス取得可能な単位内に詰め込まれる。
省5
557: (オッペケ Sr0b-jRIn) 2017/06/25(日)23:47 ID:Tfx4tn9Gr(1) AAS
>常識的に考えれば (中略) ないだろうと思う

訳:ボクは非常識です
558: (スップ Sd3f-VrB2) 2017/06/26(月)00:18 ID:mZAJ/HXWd(1/4) AAS
トンチンカンな回答がほとんどで笑える
559
(2): (ワッチョイ bfe4-Nep8) 2017/06/26(月)00:21 ID:yL9hwVgE0(1/2) AAS
正しい回答をお願いします
560: (スップ Sd3f-VrB2) 2017/06/26(月)00:29 ID:mZAJ/HXWd(2/4) AAS
byteの40bitとbの40bitが違う位置だから (ほとんどの環境で)
561: (スップ Sd3f-VrB2) 2017/06/26(月)00:32 ID:mZAJ/HXWd(3/4) AAS
8個のbがbyteをカバーしていない
562: (スップ Sd3f-VrB2) 2017/06/26(月)00:37 ID:mZAJ/HXWd(4/4) AAS
>>546>>551
回答するレベルじゃない
何も書かない方がマシ
563: (ワッチョイ bfe4-Nep8) 2017/06/26(月)01:00 ID:yL9hwVgE0(2/2) AAS
そもそも専門的な質問は2chで聞くべきじゃないし
信頼できる専門書を買うべき
564
(1): (ワッチョイ ffaa-4OJu) 2017/06/26(月)01:09 ID:RgMKiEkv0(1/2) AAS
共用体などは、C++を、10年以上勉強してから使え。
そもそも、初心者が使い道を知らないだろ

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

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

どの本にも、共用体を使った例など、載っていないだろ
565: (ワッチョイ 9f89-RNzd) 2017/06/26(月)01:26 ID:YVNj3DlL0(1) AAS
>>564
質問者はただの学習目的かもしれんのに、
素人だとか製品では〜とか批判するのは的外れだろう
566: (ワッチョイ 374b-ckEx) 2017/06/26(月)01:34 ID:jY+d4s2A0(1) AAS
>>559
すでに言われてるがまとめると>>545の状況では先頭から
byteは連続する40bit
bit_tは使わない2bitをはさんだ42bit
を使用するのでbyte-bit_t間では
余分なbitの取得・必要なbitの欠落が起きて完全な情報のやりとりにならない
567: (ワッチョイ 9f9f-Yx6S) 2017/06/26(月)01:50 ID:/d8dR7Ut0(1) AAS
5bitづつだとどうしてもアドレス跨ぎが発生するからな
4bitづつなら収まるけど
568: (オッペケ Sr0b-jRIn) 2017/06/26(月)08:14 ID:g/kuRdPjr(1/2) AAS
>信頼できる専門書を買うべき

ここは信頼できる回答が示されていても日本語が読めない低能が不毛なレスを続ける所なのだが
その典型例が>>559ということに本人が気付くことは無いのであった
569: (オッペケ Sr0b-jRIn) 2017/06/26(月)20:30 ID:g/kuRdPjr(2/2) AAS
そう言えば規格的には>>545の使い方はNGなので
>>551が言っていることはあながち間違いでもない
570: (ワッチョイ 9f1b-ZNvc) 2017/06/26(月)20:36 ID:cFoP2i7u0(1) AAS
規格的には処理系定義なので処理系のマニュアル等で確認して使うならNGではないな
571: (ワッチョイ 179a-VrB2) 2017/06/26(月)20:43 ID:GM19K0OY0(1/2) AAS
>>551は質問の回答じゃないから
572
(1): (ワッチョイ ffaa-4OJu) 2017/06/26(月)23:25 ID:RgMKiEkv0(2/2) AAS
共用体で、バイト配列とビットフィールドは、互換性がない型だから使えない。
最低でも、10年以上勉強していない者は、共用体でバグだらけになるから使うな

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

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

コンパイルエラーにならず、実行時エラーになるようなものは使えない
573: (ワッチョイ 179a-VrB2) 2017/06/26(月)23:35 ID:GM19K0OY0(2/2) AAS
なんかムキになってる
相変わらずズレてるね
574: (ワッチョイ 9faa-ZLad) 2017/06/26(月)23:55 ID:NfcBoQUW0(1) AAS
失敗を通じてしか成長できないのにね
575: (ワッチョイ bfea-WW2k) 2017/06/27(火)01:00 ID:NwZhdH240(1) AAS
10年以上勉強さん流石ですw
576: (ワッチョイ 179a-VrB2) 2017/06/27(火)08:01 ID:bJ//gE7J0(1/8) AAS
10年勉強して >>572
残念な人
577: (ワッチョイ d7d1-Rbtz) 2017/06/27(火)10:18 ID:XwCnx1+f0(1) AAS
for_eachを並列で高速化する場合
-D_GLIBCXX_PARALLEL
でopenmp使う場合と
#include <experimental/numeric>
の使う場合と
どっちが高速なの?
578
(1): (ワッチョイ 17f3-PFpe) 2017/06/27(火)10:35 ID:TVfTial50(1) AAS
自分でも無意識のうちにやってたし、ネットのサンプルとかでもよくあるけど
厳密にはunsigned intのほうが相応しい場合でもintつかってるコードをよく見かけるが
いちいちintをunsigned intで宣言し直すのもあほらしいしマクロつかって
unsigned intを_u_intとかに置き換えて宣言するのもそこまでしなくてもいいんじゃないかとも思うし
そこらへんはテキトーでいいんっすかね・・・
579: (スッップ Sdbf-iOY8) 2017/06/27(火)10:51 ID:LPANs+0ed(1) AAS
std::size_t じゃなくて?
580
(1): (ワッチョイ d76f-ADZD) 2017/06/27(火)11:30 ID:DL/1tDv80(1/2) AAS
負の値を取らないからって「厳密にはunsigned intのほうが相応しい」とは俺は考えないな
intで済むならintにする
581
(1): (ワッチョイ f7ea-LvKX) 2017/06/27(火)12:25 ID:+aQQjqLh0(1) AAS
正の数しかとらない変数がまだ初期化されていないことを明示するために負の値(特に-1)を使うとか割とよくある。
582
(2): (スッップ Sdbf-iOY8) 2017/06/27(火)14:22 ID:Gpx2Satod(1/2) AAS
>>580
・仕様として正の整数
・intの範囲で表せる
が成り立つならintにする?

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

>>581
そんな需要があるとはちょっと不思議だ。クラスメンバ?
583: (ワッチョイ 1f91-ZLad) 2017/06/27(火)14:33 ID:ntBitUxx0(1) AAS
int? i;
が許されるのはC#だっけ?
584: (ワンミングク MM7f-Rrwd) 2017/06/27(火)14:41 ID:siPR+sC7M(1/2) AAS
そもそもアドレス宣言と初期化は同時にしろって話だしね
585: (ワンミングク MM7f-Rrwd) 2017/06/27(火)14:41 ID:siPR+sC7M(2/2) AAS
アドレス宣言ってなんだ
宣言ね
586
(1): (ワッチョイ d76f-ADZD) 2017/06/27(火)15:11 ID:DL/1tDv80(2/2) AAS
>>582
std::size_tの本来の用途じゃない数値でも使つのか?それはちょっと
587: (スッップ Sdbf-iOY8) 2017/06/27(火)16:00 ID:Gpx2Satod(2/2) AAS
>>586
ああごめん、もともとは>>578
「 厳密にはunsigned intのほうが相応しい場合でも」
に反応しての発言だった。
588: (ワッチョイ 179a-VrB2) 2017/06/27(火)19:00 ID:bJ//gE7J0(2/8) AAS
>>582
size_tだと64bit環境で64bitになるぞ
589: ◆QZaw55cn4c (ワッチョイ 576d-frAY) 2017/06/27(火)19:02 ID:kIT2/xtQ0(1/2) AAS
int が 64ビットになるべきだよね
590
(1): (ワッチョイ 179a-VrB2) 2017/06/27(火)19:07 ID:bJ//gE7J0(3/8) AAS
当然そういうコンパイラはある
Windows上だと過去の色々なしがらみなどからintが32bitなのが普通
591
(1): 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) 2017/06/27(火)19:08 ID:OA/PxRyod(1/4) AAS
ビット数が気になるなら、<cstdint>のint??_tやuint??_tを使えばいいやんけ。
592: (ワッチョイ 179a-VrB2) 2017/06/27(火)19:09 ID:bJ//gE7J0(4/8) AAS
厳密にはunsignedの方が相応しいってどういう場合を想定してる?

データサイズとかならunsignedの方が相応しいとも限らないよ
593
(1): (ワッチョイ 179a-VrB2) 2017/06/27(火)19:11 ID:bJ//gE7J0(5/8) AAS
>>591
そういう問題じゃない
言語のデフォルトサイズ、一番効率が良いとされているサイズが32bitなのか64bitなのか
の問題
594: 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) 2017/06/27(火)19:15 ID:OA/PxRyod(2/4) AAS
その場合はintfast_t, uintfast_tを使う
595
(1): (ワッチョイ bfe4-Nep8) 2017/06/27(火)19:19 ID:N0WooBY/0(1) AAS
データが持つ意味と型の振る舞いは極力一致させるべきで
型の振る舞いはできる限り制限するべき
負の値を取り得ないならunsignedにする
ローカル変数ならsignedでもいい
596
(1): ◆QZaw55cn4c (ワッチョイ 576d-frAY) 2017/06/27(火)19:30 ID:kIT2/xtQ0(2/2) AAS
>>590
え?そんなコンパイラが実在するの?
597
(2): 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) 2017/06/27(火)19:33 ID:OA/PxRyod(3/4) AAS
>>596
64-bit Linuxとか使ったことねーのか?
598: 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-pKS6) 2017/06/27(火)19:37 ID:OA/PxRyod(4/4) AAS
>>597
ごめんなさい。
599: (ワッチョイ 179a-VrB2) 2017/06/27(火)19:51 ID:bJ//gE7J0(6/8) AAS
特殊な例だとcharからlong longまで全部64bitとかあるぞ
もちろんPCではないけど
600: (ワッチョイ 179a-VrB2) 2017/06/27(火)19:52 ID:bJ//gE7J0(7/8) AAS
こいつが噂のMZか
一人芝居の
601: (アウアウウー Sa9b-h10b) 2017/06/27(火)20:06 ID:3pUMWgYLa(1) AAS
>>593
言語つーかCPUに依存しないか。
Core2は64ビット対応でも32ビットのが速い。
64ビットが速いのはCore iからとか。
602: (ワッチョイ 179a-VrB2) 2017/06/27(火)20:10 ID:bJ//gE7J0(8/8) AAS
x86の64bitモードは32bitの方が速い命令がある
キャッシュ容量とかメモリ帯域とかを考えても、絶対に32bitで足りるなら、32bitを選んだ方がいい
603: (オッペケ Sr0b-jRIn) 2017/06/27(火)21:37 ID:ExZegnFlr(1) AAS
>こいつが噂のMZか
>一人芝居の

Qの一人芝居はまだ余興として見られるがもう一人のクソコテの一人芝居は痛々しくて見ていられない
604: (ワッチョイ 9fc3-NIhq) 2017/06/28(水)02:28 ID:Irk2C7ZK0(1) AAS
>>595
型の振る舞いをできる限り制限するのは誤りを起こさない、起こしても明確なエラーにするのが目的だと思うんだけど、
符号なし整数型にそういった機能は無くて実際の助けにはならないから、こういう議論が起こる。
605: (ワッチョイ d76f-ADZD) 2017/06/28(水)04:29 ID:matoew650(1/2) AAS
むしろsignedにしておけば不正に負の値が入れられた場合チェックしやすい
606: (ワッチョイ 9f89-RNzd) 2017/06/28(水)07:46 ID:Aii/VoAq0(1) AAS
符合つき整数との比較や算術演算した際に、warning出たり符合なしに変換されたりと面倒なことが多いから、定義域が非負という理由だけではわざわざ符合なしにはあまりしたくない。
607: (スプッッ Sd3f-oVeJ) 2017/06/28(水)08:16 ID:MovvcuP9d(1) AAS
googleのスタイルだと整数は符号ありを使えってなってる
608: (スップ Sd3f-VrB2) 2017/06/28(水)13:11 ID:4LULrFdtd(1) AAS
APIも64bitは符号ありが多い
609
(2): (ワッチョイ 7f91-fiUu) 2017/06/28(水)14:24 ID:qTRul81R0(1) AAS
Vvector<vector<float>> tensor;
のようなテンソルを、1列にまとめて
void Vector_Func(vector<float> &v){}
ベクトルの関数の引数にしたいんだけどさ
これって、新たにVector<float>型のベクトルを定義してそこにベクトルの中身をコピーし、それを利用して関数を呼び出して、さらにもとのテンソルにコピーして戻すしかないのかな?
2度のコピーにかかる時間を短縮できる方法があったら誰か教えて!!!
610: (ワッチョイ bfaf-7LQj) 2017/06/28(水)14:26 ID:+YCVI2Ik0(1) AAS
typedef vector<vector<float> > tensorf;
それとも右辺値参照的な話だろうか
611: (ワッチョイ 9f9f-Yx6S) 2017/06/28(水)14:29 ID:eX7vr1Kz0(1/2) AAS
参照になっているなら直接vを弄るだけでコピーする必要もないと思われ
612: (ワッチョイ d76f-ADZD) 2017/06/28(水)15:12 ID:matoew650(2/2) AAS
>>609
1列にまとめる必要があるという前提ならどうしようもない気がする
vector<vector<float>>を止めてデータの並びが最初から1列にまとまってるようなテンソルクラスを作るか、
どっかの行列ライブラリを転用するんだな
613: (ワッチョイ 9f9f-Yx6S) 2017/06/28(水)16:00 ID:eX7vr1Kz0(2/2) AAS
参照渡しでvが正常に得られるということは、vectorが値の参照を許容しているとも言える。
614: (ワンミングク MM7f-Rrwd) 2017/06/28(水)16:46 ID:cWs7iztoM(1) AAS
>>609
iteratorパターンかrange viewのようなものを作る
615: (オッペケ Sr0b-jRIn) 2017/06/28(水)18:00 ID:lG20CtJar(1) AAS
612は健常者
616: ◆QZaw55cn4c (ワッチョイ 179a-jSYe) 2017/06/28(水)22:05 ID:y88Z2FQA0(1) AAS
>>597
その64bit Linux に乗っているコンパイラは何?
617: (ササクッテロラ Sp71-kiAr) 2017/06/29(木)22:16 ID:3dQByb1op(1) AAS
C++の数値計算のコード読んでくとreadmeにSiam journal って雑誌の引用見かける事がやたら多いんだけどc++やる人は必読の雑誌だったりします?
618: (ワッチョイ 016f-bKJX) 2017/06/30(金)01:47 ID:66+xb1tk0(1) AAS
C++ってより言語を問わず数値計算やる人だな
高速性が要求される数値計算はC++が使われることが多いってだけ
619: (ワッチョイ 46e4-ejav) 2017/06/30(金)01:56 ID:/WxXdso/0(1) AAS
まず数学力を鍛えたほうがいい
620: (オッペケ Sr71-F+4p) 2017/06/30(金)08:34 ID:2shJEbz+r(1) AAS
これがアスペというやつだな
621: (ワッチョイ 921b-zTMA) 2017/07/01(土)07:18 ID:C6ffpB7m0(1/3) AAS
式テンプレートを勉強中です。
X(i) op Y(i)だけで結果が決まる場合はともかく
行列の逆行列のような一要素の計算に行列全部が影響するような計算を
こいつで実装する意味ってありまつか?
実装例とかあったら教えてください
622
(2): (ワッチョイ 06af-D66J) 2017/07/01(土)07:25 ID:qtP/3v2i0(1/2) AAS
意味というか行列の逆行列のij成分はij余因子を行列式で割った値だと言うことを知っていれば
NxN行列の逆行列の各成分はij余因子行列である(N-1)x(N-1)行列の行列式の計算になるから
数学的帰納法的にテンプレート化可能
623: (ワッチョイ 42aa-wjSU) 2017/07/01(土)07:49 ID:nS8nnQe50(1/3) AAS
>>622
君は説明がうまいね
624: (ワッチョイ 06af-D66J) 2017/07/01(土)08:05 ID:qtP/3v2i0(2/2) AAS
いやそれほどでも・・・///
625: (ワッチョイ 42aa-wjSU) 2017/07/01(土)08:28 ID:nS8nnQe50(2/3) AAS
式テンプレートで正項と負項をバサッと消し合うようなことができないかと考えて挫折したなあ
626
(1): (ワッチョイ 921b-zTMA) 2017/07/01(土)08:44 ID:C6ffpB7m0(2/3) AAS
>>622
いや、その余因子を求めることも、そこから行列式を求めるにも、全行列値が必要になるわけだし、
そもそも、余因子行列式の計算はNxN->3x3までの変換が再帰的な計算でスタックを使いたおすことになるので、
ヒープに一時オブジェクトを使わずにすむといという式テンプレートのメリットが全くないんじゃないんですか?

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

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

数学的帰納法とは、
i=1のときf(1)が成立する
省2
627: (ワッチョイ 921b-zTMA) 2017/07/01(土)09:09 ID:C6ffpB7m0(3/3) AAS
>>626
ちょっと、誤解を招きかねないんで、
余因子行列式が再帰的云々と書きましたが、
余因子に限らず、行列式の計算そのものが再帰的という意味です。
だから、行列式計算そのものがやたら時間がかかる。
大学の試験の答案とかで、途中点をかせぐために(連立方程式を解いて計算間違いするより加点が期待できる)、
余因子行列式/行列式
を明記したりしますが、このやり方はせいぜい手計算でできる4x4程度の話で、
それ以上だと掃き出し法に比較して極端に非効率ということです。
628: (オッペケ Sr71-F+4p) 2017/07/01(土)09:32 ID:T5yR4indr(1/2) AAS
>>626
>効率悪すぎて数値計算じゃ使いませんよ
「式テンプレートの勉強」を「汎用数値計算ライブラリを式テンプレート化するための勉強」にすりかえられても…

>どういう意味です?
ヒント:回答者は日本語を正しく使えない
629: (ワッチョイ 42aa-wjSU) 2017/07/01(土)10:10 ID:nS8nnQe50(3/3) AAS
再帰的に→帰納的に→帰納法的に
jk
630: (ワッチョイ 0111-WwN4) 2017/07/01(土)12:42 ID:RfHKhQjf0(1) AAS
数学用語はよくわからんけど
>行列の逆行列のような一要素の計算に行列全部が影響するような計算を
>こいつで実装する意味ってありまつか?
ない

というか式テンプレート勉強するというなら自分で軽く実装してみるべきだよ
↑の場合は速度がどうこう以前の問題だとわかるから
631: (オッペケ Sr71-F+4p) 2017/07/01(土)13:26 ID:T5yR4indr(2/2) AAS
>再帰的に→帰納的に
これはひどい
再帰的と帰納的は関係ないし、数学的帰納法は帰納的でも帰納法でもない

>>こいつで実装する意味ってありまつか?
>ない
確かに質問に対する明確な回答なのだが、何かこう足りないような…
632: (スッップ Sd62-TIEP) 2017/07/05(水)14:15 ID:/9Xtn5yvd(1/2) AAS
scanfより速い標準入力ってない?
スペース区切りの大量のintをベクトルにいれたいんだけどループ回してscanfがどうやっても最速なのかな
633
(2): (ワッチョイ 6e1c-4/kT) 2017/07/05(水)15:44 ID:4h6UtxrL0(1) AAS
istream_iterator<int> first(cin), last;
vector<int> wish_of_632{first, last};
634: (スッップ Sd62-TIEP) 2017/07/05(水)16:39 ID:/9Xtn5yvd(2/2) AAS
>>633
試してみるサンクス
635: (オッペケ Sr71-F+4p) 2017/07/05(水)16:59 ID:UhWlQCq1r(1/3) AAS
Visual Studio 2017のリリースビルドで試したが>>633 の方法は倍ほど遅いような
636: 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) 2017/07/05(水)17:16 ID:2aUA7xnEd(1/5) AAS
fread, fgets, getchar
637
(1): 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) 2017/07/05(水)17:22 ID:2aUA7xnEd(2/5) AAS
int n = 0;
if ('0' <= ch && ch <= '9') {
n *= 10;
n += ch - '0';
} else {
put_int(n);
n = 0;
}
638: 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) 2017/07/05(水)17:31 ID:2aUA7xnEd(3/5) AAS
GetStdHandle(STD_INPUT_HANDLE)
639: (ワッチョイ c2f0-wjSU) 2017/07/05(水)18:03 ID:IVGCprss0(1) AAS
大量=一行10000個程度の数字が10000行ほど?
640
(1): (オッペケ Sr71-F+4p) 2017/07/05(水)18:09 ID:UhWlQCq1r(2/3) AAS
自前が最速なのだろうが汎用性を考えるとお勧めできない

ある環境での適当な100万個の整数読み込み時間:
 istream_iterator : 470ms
 scanf : 230ms
 fgetc+自前スペース解析+atoi :
175ms
 最初に全部char配列に読み込み+片山式パース: 32ms
641: (ワッチョイ 46e4-ejav) 2017/07/05(水)19:23 ID:rZavNuQl0(1) AAS
何のチェックもしないscanf,printfのやり方が最速なのは自明
642
(1): (ワッチョイ 6111-wjSU) 2017/07/05(水)20:06 ID:tZeoWZVY0(1/3) AAS
>>640
>最初に全部char配列に読み込み+片山式パース:

これって随分早いけどパースより読み込みが効いてるんじゃないの
恐らくfgets使ってるんだよね
643
(1): (オッペケ Sr71-F+4p) 2017/07/05(水)20:09 ID:UhWlQCq1r(3/3) AAS
>>642
fgetsでなくfreadで読んだ
なおこの全読み込み方式で数値の切り出しをatoiにすると80msだったので
やはりI/Oの効率化が支配的と理解した
644: (ワッチョイ 6111-wjSU) 2017/07/05(水)21:04 ID:tZeoWZVY0(2/3) AAS
>>643
てことは
fgetc+自前スペース解析+atoi :175ms
fread++自前スペース解析+atoi :80ms
読み込みのオーバーヘッドで175-80=95msロスしてるわけか

atoiは変換不能文字とか16進とかチェックしてるからその分遅くなるんだろう
自前で10進のみに特化させるのが一番なんだけどもな
645: (スップ Sdc2-Pf3w) 2017/07/05(水)21:05 ID:O+22iBefd(1/3) AAS
複数スレッドに分けてアセンブラの自作関数で回す
646: (スップ Sdc2-Pf3w) 2017/07/05(水)21:07 ID:O+22iBefd(2/3) AAS
各スレッドも、複数数値を並列で動かす
647: (スップ Sdc2-Pf3w) 2017/07/05(水)21:08 ID:O+22iBefd(3/3) AAS
C++スレだった
すまんこ
648: はつみつ餃子 ◆8X2XSCHEME (ワッチョイ 8215-CicO) 2017/07/05(水)21:23 ID:YH3wEyty0(1) AAS
どういう風に並列化できる?
649: 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) 2017/07/05(水)21:26 ID:2aUA7xnEd(4/5) AAS
処理すべきブロックに対して、ちょうどいい区切りで、等分割に近い分割をやって、それぞれを別々のスレッドで処理する。
スレッドがすべて終わったら、処理結果を結合する。
650: (ワッチョイ 6111-wjSU) 2017/07/05(水)21:28 ID:tZeoWZVY0(3/3) AAS
スレッドもインラインアセンブラもC++の範疇だよ
ただIOはロックされるから解放待ちの時間が出来てしまう

ラインごとに随時読み込んでスレッド振り分けかな
パースに時間がかかるならそれも悪くないんだろうけど簡易atoi程度じゃ差は出にくい
651: (ワッチョイ c21b-8PSv) 2017/07/05(水)21:34 ID:slEXI2jh0(1) AAS
原理的にはブロッキングIOのファイル読み出しの待ち時間を有効に活用すれば
それが最速だけど並列化のオーバーヘッドを最小にしようと思ったら
OS毎あるいはファイルIOのライブラリ毎に特化しなきゃならない気がするので面倒くさい
652: 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) 2017/07/05(水)21:40 ID:2aUA7xnEd(5/5) AAS
#ifdef _WIN32
// Windowsの場合
...
#elif ...
1-
あと 350 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.117s