18/07/30 19:26:58.25 aSIGzv/D0.net
上位3件
554:デフォルトの名無しさん
18/07/30 19:27:37.61 aSIGzv/D0.net
だろ
普通に考えて
555:デフォルトの名無しさん
18/07/30 19:28:21.43 xHVHgAPAa.net
3件しかデータがないのに多い順となるとその内2件が同じ値でなければできない。
3件とも違うとか、あるいは3件とも同じなら並べかえる必要がない。
更に配列の先頭の二つが同じなら並べ変える必要がない。
それは既に多い順になっている。または全て同じ値だ。
とすると二番目の値と三番目の値を比較し、同じだったら最初の値と三番目の値を入れ換えれば良い。
三つとも全て同じ値の時に無駄な入れ換え処理をすることになるが、この程度はよかろう。
556:デフォルトの名無しさん
18/07/30 19:29:45.17 xHVHgAPAa.net
>>543
知らんがな。
557:デフォルトの名無しさん
18/07/30 19:37:02.99 aSIGzv/D0.net
「3件のみを」は「出力」にかかる
「値が多い」だから出現回数順
「多い順」のソート対象は書いてないが
普通に考えれば入力した全数
これがおれの解釈
558:デフォルトの名無しさん
18/07/30 19:43:33.82 WDgnZ3L+0.net
出現頻度の上位3位分を出せ?
typedef double VAL_T;
struct {
VAL_T val;
int count;
} data[100] = { 0 };
線形探索して カウントアップして data[] を count をキーにソートして
data[0].val, data[1].val, data[2].val, を出力する
559:デフォルトの名無しさん
18/07/30 19:44:19.20 v5YMtZ310.net
整数値ではなくて実数値で出現回数って些か問題に無理がないか?
560:デフォルトの名無しさん
18/07/30 19:56:43.56 xHVHgAPAa.net
>>547
その解釈が恐らく正しいと思うが、元の文章は素直に読むとそうならんよなあ。
561:デフォルトの名無しさん
18/07/30 19:58:59.40 WDgnZ3L+0.net
値の大きい順に上位3位なら
VAL_T data[100];
入力値をつっこんで data をソートして data[0], data[1], data[2], を出力する
int sortcmp(const void* c1, const void* c2)
{
VAL_T d1 = *(const VAL_T*)c1;
VAL_T d2 = *(const VAL_T*)c2;
if (d1 > d2) return -1;
else if (d1 < d2) return 1;
return 0;
}
・・・・
qsort(data, num, sizeof(VAL_T), sortcmp);
for (i=0; i<3 && i<num; i++)
printf("%d: %lg\n", i+1, (double)data[i]);
・・・・
562:デフォルトの名無しさん
18/07/30 20:08:25.88 aSIGzv/D0.net
>>550
そういう解釈も可能
563:デフォルトの名無しさん
18/07/30 20:10:45.97 aSIGzv/D0.net
色々な解釈が可能な文
仕様書からコードにするときには
複数の解釈が無いか気にした方が良い
564:デフォルトの名無しさん
18/07/30 20:17:02.90 kECQyXHfp.net
すみません。値が大きい順です。お願いします。
565:デフォルトの名無しさん
18/07/30 20:21:05.16 Ei1MMj+i0.net
良い試験問題だなw
566:デフォルトの名無しさん
18/07/30 20:23:08.08 aSIGzv/D0.net
ずこーっ
上位3個でqsortとか使うのはアホ
567:デフォルトの名無しさん
18/07/30 20:25:48.38 r0zEs9EBa.net
ああ。sortコマンドとheadコマンド使いたくてうずうずする。
568:デフォルトの名無しさん
18/07/30 20:30:04.49 r0zEs9EBa.net
上位三つなら全部チェックすりゃあ良いんじゃないか?
ループとif文3つか?
569:デフォルトの名無しさん
18/07/30 20:39:55.63 WDgnZ3L+0.net
なんやソート使えという制限はないのか
570:デフォルトの名無しさん
18/07/30 22:01:25.27 WHL4n1uA0.net
ココではquickselectというアリゴリズムを使いなさい
というのが正解
やっぱりなこのスレは浅はかなクルクルパーしかいないわ
571:デフォルトの名無しさん
18/07/30 22:06:32.60 Ei1MMj+i0.net
>>560
上位3名に入れそうだね?
572:デフォルトの名無しさん
18/07/30 22:17:34.44 aSIGzv/D0.net
quickselectもアホ
上位3個なら原始的なアルゴリズムが一番速い
573:デフォルトの名無しさん
18/07/30 22:18:31.28 aSIGzv/D0.net
速くて簡単でリソースも使わない
574:デフォルトの名無しさん
18/07/30 22:19:07.01 Z5guDo9v0.net
課題みたいだし
・バブルソートを書けるか
・保持する要素は3つでいいことに気付けるか
をみる定型問題だろね
575:デフォルトの名無しさん
18/07/31 08:53:15.13 CiY/UjgCK.net
アルゴリズムもわかってない
まず、問題解決のための適切なアルゴリズムの選択ができない
クイックソートは明らかに適切ではない
ここではクイックセレクトが適切
確かにこのスレには
まともな教育を受けたのはいない
基本的になにも知らなすぎる
白痴に近い
576:デフォルトの名無しさん
18/07/31 09:25:34.54 quzd6t9e0.net
クイックセレクトってどんなアルゴリズムなん?
元はクイックソートだけどソートしないで選択するだけって感じ?
577:デフォルトの名無しさん
18/07/31 09:39:58.84 +/oTEV5Ja.net
>>566
無駄な比較をしない感じ
578:デフォルトの名無しさん
18/07/31 11:52:18.67 Sty7sRvnH.net
>>566
パーティショニングして目的の順位を含む方だけ再帰
579:デフォルトの名無しさん
18/07/31 12:06:11.93 TL2AM5+0M.net
あー、そういうことか
580:デフォルトの名無しさん
18/07/31 12:43:01.65 xftY0DAGd.net
明らかに上位3個の抽出には向かない
581:デフォルトの名無しさん
18/07/31 12:45:03.91 xftY0DAGd.net
最大値を探すのにクイックセレクトを使うアホはいない
そういうこと
3個でも同じ
582:デフォルトの名無しさん
18/07/31 13:12:03.24 kZi5wZ5a0.net
入力毎に判定。
3プールのmin以下なら無視。
maxより大きいなら順位シフト。
mid以下ならmin上書き。
それいがいはmidをminにしてmid上書き。
583:デフォルトの名無しさん
18/07/31 13:17:53.66 xftY0DAGd.net
そういう原始的なアルゴリズムが最良
584:デフォルトの名無しさん
18/07/31 13:21:36.88 xftY0DAGd.net
最悪パターンは小さい順に並んだ時だが
これでもせいぜい数倍になるだけ
クイックセレクトの最悪値は酷い
もちろん典型例でも原始的アルゴリズムの方が速い
元データも変更不要
メモリも3個分だけ
585:デフォルトの名無しさん
18/07/31 13:29:26.70 NZiCEZHW0.net
1,ソート対象...data[5, 3, 12 ,8 ,6]
2,メモリをソート対象の最大値個数分確保...a[12]
3,ループでa[5]=data[5], a[3]=data[3]...と全部入れる
4.詰めてオシマイ
史上最速ソートだと思わないか?ループ1回で終わるどw
586:デフォルトの名無しさん
18/07/31 13:45:59.26 j6W8yzMq0.net
>>575
バケットソートだね~
値の重複がある場合はリストをつなぐ必要があるし
今回の問題は要素が実数値だから不適になっちゃうけど
587:デフォルトの名無しさん
18/07/31 13:49:32.57 hTiFVqvS0.net
質問内容によるとソート対象は実数値なんだが
588:デフォルトの名無しさん
18/07/31 13:49:52.96 NZiCEZHW0.net
>>576
あ、そういう名前で実際あるんだね・・・
素晴らしいアイディアだと思ったのに(´・ω・`)
589:デフォルトの名無しさん
18/07/31 14:44:47.46 riS9l2jZ0.net
値をいれる必要はない。
各要素を出現回数のカウンタにすれば重複数も記録できる。
だがこれができるのは入力が整数で表せる場合だけ。
590:デフォルトの名無しさん
18/07/31 14:46:44.33 UZkSYp0La.net
ま、しかし、普通の数値で100しかデータがないと今時のPCだとどんなアルゴリズム使っても人間が感じられないぐらいのスピードで実行しちゃうと思う。
わざとsleepとかするなら別だが。
591:デフォルトの名無しさん
18/07/31 14:57:40.88 PCFGvven0.net
今は熱対策が必要だな
592:デフォルトの名無しさん
18/07/31 17:49:39.11 xftY0DAGd.net
>>580
桁数が異常に長い入力とか
チープなマイコンとか
まあ色々と考えられる
593:デフォルトの名無しさん
18/07/31 17:55:01.37 UZkSYp0La.net
あー。1万桁のデータが100個とか。w
594:デフォルトの名無しさん
18/07/31 17:58:48.84 zWbJ6Mhya.net
スレッドの引数に渡す構造体を↓みたいにして、
クラスのメンバ関数ポインタを渡そうとしたんですがエラーになります。
info.pfunc = test.callの部分はどう書くのが正解ですか?
typedef struct
{
void (*pfunc)();
} TInfo;
class TestClass
{
public:
void Call(void)
{
cout << "呼んだ" << endl;
}
};
main()
{
TestClass test;
TInfo info;
info.pfunc = test.call;
}
595:デフォルトの名無しさん
18/07/31 18:03:58.43 Yh1Yhi2x0.net
最近はC言語にクラスがあるの?
596:デフォルトの名無しさん
18/07/31 19:15:37.92 NZiCEZHW0.net
static void Call()
597:デフォルトの名無しさん
18/07/31 20:20:43.19 4WdKzGL90.net
#include <stdio.h>
typedef struct tag_baka_t t_baka_t;
typedef int (*baka_func_t)(t_baka_t const* pt_baka);
typedef struct tag_baka_t {
char* text;
baka_func_t function;
} t_baka_t;
int call_baka1(t_baka_t const* ct_baka) { fprintf(stdout, "baka1:%s\n", ct_baka->text); return 1; }
int call_baka2(t_baka_t const* ct_baka) { fprintf(stdout, "baka2:%s\n", ct_baka->text); return 2; }
int call_baka3(t_baka_t const* ct_baka) { fprintf(stdout, "baka3:%s\n", ct_baka->text); return 3; }
int call(t_baka_t const* ct_baka) {
return ct_baka->function(ct_baka);
}
int main(int argc, char* argv[]) {
t_baka_t baka1 = { "boo", call_baka1 };
t_baka_t baka2 = { "foo", call_baka2 };
t_baka_t baka3 = { "woo", call_baka3 };
fprintf(stdout, "called baka1 -> returned %d\n", call(&baka1));
fprintf(stdout, "called baka2 -> returned %d\n", call(&baka2));
fprintf(stdout, "called baka3 -> returned %d\n", call(&baka3));
return 0;
}
C言語の構造体ならコレでいける
コレならバカでも分かるハズ
C++の構造体でも同じように書ける
598:さまよえる蟻人間
18/07/31 20:29:50.71 qpn2fVfCd.net
ばかばっか
599:デフォルトの名無しさん
18/07/31 20:29:50.72 V319xmHP0.net
>>584
節子それc言語やないで
600:デフォルトの名無しさん
18/07/31 20:33:19.91 j6W8yzMq0.net
>>584
完全にC++ですやん
URLリンク(ideone.com)
とりあえずstd::functionの使いどころかなとは思うけど
601:デフォルトの名無しさん
18/07/31 21:00:04.51 YzKZx0BTa.net
>>590
これっぽいですね、ありがとうございます
オブジェクトポインタと関数ポインタを別スレッドに渡して、
スレッドでその関数を定期的にコールすることをしたかったんです
602:デフォルトの名無しさん
18/07/31 23:06:10.75 ljgZb1RQ0.net
次からはC++の質問はC++のスレへ。
603:デフォルトの名無しさん
18/08/01 16:42:35.83 9yb7YrdQ0.net
クイックソートのwikipediaに書いてあるc言語のソースに、
【value_type tmp, pivot = med3(a[i], a[i + (j - i) / 2], a[j]); /* (i+j)/2 ではオーバーフローしてしまう */】
と書いてあるのですが、「(i+j)/2ではオーバーフローしてしまう」のオーバーフローする場合がまったくわかりません。
教えていただけますか。
604:さまよえる蟻人間
18/08/01 17:40:34.16 TGp/sEuFd.net
i, jがどんな値かによる。
i == 0x7fffffff && j == 0x7fffffff
で、i + jがどんな整数値になるか考えたまえ。
605:デフォルトの名無しさん
18/08/01 18:09:35.03 9yb7YrdQ0.net
ありがとうございます。理解出来ました。
下限上限への理解がまだまだでした…
606:デフォルトの名無しさん
18/08/01 18:20:26.56 edgaccID6.net
>>593
unsigned char i=128,j=128,k;
k=i+j;
607:デフォルトの名無しさん
18/08/01 19:46:12.42 xh0kKqMn0.net
>>584が578のやり方でtest.Callのアドレスを渡せないのはなんでなん?理由が知りたい。
608:デフォルトの名無しさん
18/08/01 20:21:01.54 jfFEYUCE0.net
>>597
まず瑣末だけど、 test.call じゃなくて &Test::Call でメンバ関数のポインタを取らなきゃいけないってのはあるけど それはいいとして
ざっくり言えば「メンバ関数の型はクラスの型を含んでて、普通の関数とは型違うから」ってとこかねー
# g++
エラー: cannot convert ‘void (TestClass::*)()’ to ‘void (*)()’ in assignment
info.pfunc = &TestClass::Call;
スレチなので 解答が不足ならば「C++相談室」か「スレ勃てるまでもないC/C++の質問はここで」辺りで願います
詳しい人いるだろうし
609:デフォルトの名無しさん
18/08/01 20:28:43.32 xh0kKqMn0.net
>>598
そのざっくりな説明だけでもわかりやすい。なるほどありがとう。
610:デフォルトの名無しさん
18/08/01 20:34:52.96 xh0kKqMn0.net
ググったら安定のロベールさん出てきた。買った方がいいなこれ基礎力でえらい差が出てしまう気がしてきた
611:デフォルトの名無しさん
18/08/01 20:52:58.87 WDXOLOCva.net
C++の話はC++スレでやれ。
612:デフォルトの名無しさん
18/08/01 21:33:20.86 jJEMbL0b0.net
なんだ結局ロベールのステマかよしょうもねえな
613:デフォルトの名無しさん
18/08/01 22:23:36.11 ArWxfDp8a.net
>>598
分かりやすい説明
614:デフォルトの名無しさん
18/08/02 00:25:44.59 6TeXhDWV0.net
オーバフロー以前に
ポインタ同士の足し算なんかしないからな(Cでは普通のやりかたではできない仕様になってる)
ポインタ同士の足し算なんかしたらおもいっきりオーバーフローすることがあるからな
つまり簡単にオーバーフローはおきうる
ポインタにはアドレスが入ってるからな
やってることは
基準になるオフセット(ここでは左端)に距離を足すだけといっていい
距離は通常ポインタの引き算で求める
距離は左端と右端の距離の半分の距離に
基準になるオフセットに足す
すると中間点になる
つまり中間点固定
しかしピボットが中間点固定だと最悪のケースの場合
クイックソートはものすごく遅くなる
で、ピボットを乱数で選択することで
その最悪のケースを回避するというやりかたもある
実際の現実のデータでそんな最悪のケースはほぼないといっていい
615:デフォルトの名無しさん
18/08/02 00:29:26.39 c3/ck1cgd.net
すいません初心者です、質問なんですが・・・
for文を使うときにfor(i = 1 ;i <= 5 ;i++ )でiが5より増えたときにループを抜けるようにiを1ずつ増やすというのは分かるんですが
何故ループするときにfor文のi = 1の代入の部分は無視されるんでしょうか・・・
616:デフォルトの名無しさん
18/08/02 00:39:59.52 6TeXhDWV0.net
そういう制御文だからな
そういう仕様だ
for ( [ループ前に行う演算]; [ループが処理される条件]; [次のループが処理される前に行う演算] )
i = 1;
whlle (i <= 5) {
・・・
i++
}
と同じ
どれもすべて入れても入れなくてもいい
for (;;) こう書くと無限ループになる
617:デフォルトの名無しさん
18/08/02 00:43:35.36 c3/ck1cgd.net
なるほどそういう仕様だったんですね・・・
丁寧にありがとうございますこれでようやく眠れる
618:デフォルトの名無しさん
18/08/02 01:18:26.80 4HyEhcJnM.net
>>606
continueがあるとちょっと書き換えが必要だけどね
619:デフォルトの名無しさん
18/08/02 06:45:33.31 S4Pms+eVM.net
>>608
書き換え?
i = 1;
whlle (i <= 5) {
・・・
goto CONTINUE;
・・・
CONTINUE:
i++
}
ってやるだけだろ
620:デフォルトの名無しさん
18/08/02 07:13:00.94 PxPZ0mdd0.net
それが書き換え
ってのが>>608の主張だろ
621:デフォルトの名無しさん
18/08/02 09:43:21.84 NSwKZwuS0.net
for文でのcontinueの挙動を最近知ったばかりで自慢したかったんだろ
622:デフォルトの名無しさん
18/08/02 09:48:48.46 Bu8RCR+yd.net
if
for
while
do while
goto
break
continue
このくらいしか無いんだから全部覚えとけ
なぜかgotoの使い方を知らんヤツが多い
多重ループを抜けるのにわざわざフラグを使うアホとか
623:デフォルトの名無しさん
18/08/02 10:51:33.79 NSwKZwuS0.net
使い方を知らんというより
絶対使うなと刷り込まれているのが多い
なぜだと聞いても答えられないやつ全員
624:デフォルトの名無しさん
18/08/02 12:55:13.95 Cp7uV85Za.net
gotoは悪という教義のある宗教の信者だから仕方がない。
625:デフォルトの名無しさん
18/08/02 13:54:18.40 4fjj7SMLd.net
大体使わなくて済むし
使う必要がある時に
さりげなく使うもの
626:デフォルトの名無しさん
18/08/02 14:17:14.48 TfLreE+60.net
全く使わない 脱出用途なら使う 飛び込みでも使う
627:デフォルトの名無しさん
18/08/02 16:25:02.06 SFe9zIxEa.net
脱出時だけ使ってるな。
関数の途中で複数エラーが出る可能性がある場合とかは関数の最後の方にgotoさせてそこでまとめてメモリ解放などをする。
他の言語だと例外投げて try catch でなんとかするようなやつだな。
628:デフォルトの名無しさん
18/08/02 18:05:39.94 QNpgl+2ZM.net
飛び込みはやめーや
629:デフォルトの名無しさん
18/08/02 18:57:08.60 yzfiTIk96.net
脱出はreturnにすればいい
630:デフォルトの名無しさん
18/08/02 19:01:34.31 xZR22mJ60.net
returnが複数あるのを嫌がる宗派があるからなあ
631:デフォルトの名無しさん
18/08/02 19:11:54.12 1EegAYN5d.net
>>619
宗教の信者さん?
632:デフォルトの名無しさん
18/08/02 19:12:56.06 jJ76BOdj0.net
初期化(1) if (エラー) goto E1;
初期化(2) if (エラー) goto E2;
初期化(3) if (エラー) goto E3;
:
return おっけー
E3: (3) の後始末
E2: (2) の後始末
E1: (1) の後始末
return エラーじゃ
633:
18/08/02 19:15:38.12 hFhSdR7O0.net
>>620
確かに、misra が全力でそれを嫌うのは、なにか理由があってのことでしょうか?
634:デフォルトの名無しさん
18/08/02 19:20:08.81 zwgkA1lD0.net
>>622
俺もこれ派だわ
635:デフォルトの名無しさん
18/08/02 19:26:51.94 1EegAYN5d.net
○○派とか言うと他の方法を知らないように感じる
臨機応変に色々の方法を使い分けるのが良い
636:デフォルトの名無しさん
18/08/02 19:33:21.75 xZR22mJ60.net
コーディング規約を決める偉い人の信仰心に依存する、か
637:デフォルトの名無しさん
18/08/02 19:35:06.17 zwgkA1lD0.net
>>625
あとよく使うのがagainだな
ループでagainしたい時に上に飛ぶやつ
638:デフォルトの名無しさん
18/08/02 19:41:55.73 1EegAYN5d.net
コーディング規約を偉い人が決めるような会社は嫌だな
639:デフォルトの名無しさん
18/08/02 19:43:01.73 1EegAYN5d.net
偉い人はもっと大きな事を考えて
640:デフォルトの名無しさん
18/08/02 20:10:50.62 Cjo1mv3c0.net
エラー起こす前にちゃんと検査しろ。
641:デフォルトの名無しさん
18/08/02 20:30:01.75 1NEFWSVpM.net
retryとoutは使うわ
後始末不要ならその場でreturn
後始末必要なら最後にreturn
まあこの辺の書き方より関数名、変数名、変数の数を気にして欲しいと思う今日この頃
642:デフォルトの名無しさん
18/08/02 22:24:28.26 NSwKZwuS0.net
Cのgotoが関数から出られない、という時点で
悪しきgotoの大部分が封じられているんだけど
せっかくそうなって�
643:「るのに1関数で数千行なんてやらかす 何というか吹っ切れたやつが暗黒面に墜ちていると とんでもねえんだよ
644:
18/08/02 22:30:24.78 hFhSdR7O0.net
>>632
>Cのgotoが関数から出られない、という時点で悪しきgotoの大部分が封じられている
ところがどっこい、setjmp()/longjmp() というものがありまして…
645:デフォルトの名無しさん
18/08/02 22:43:04.03 xZR22mJ60.net
longjmpでイスカンダルまで飛びたいんですけど
何故か地球に戻ってしまいます
646:デフォルトの名無しさん
18/08/03 02:01:51.21 TY6Sib0f0.net
イスカンダルのトーフ屋
647:デフォルトの名無しさん
18/08/03 05:37:20.02 o9dqmONZ0.net
孫悟空はsetjmp/longjmpの使い手
648:デフォルトの名無しさん
18/08/03 09:55:27.36 UvsVeV1Q0.net
組込み人は状態変数でワープする。
649:デフォルトの名無しさん
18/08/03 10:02:42.04 8VyIMXmS0.net
スタック上の戻りアドレスを自分で操作して、好きな場所にワープさせてた奴いたっけな
650:デフォルトの名無しさん
18/08/03 10:12:18.20 9KGEdKKU0.net
>>633
longjmpで悪しきgotoを
やって見せてくれ
ideoneで
651:デフォルトの名無しさん
18/08/03 14:40:50.79 9KGEdKKU0.net
悪しきgotoの大部分を封じるときに
巻き添えで封じられた悪しくないgotoを救う
アイテムがlongjmpだろうがよ
652:デフォルトの名無しさん
18/08/03 19:36:07.75 4c00FTp80.net
gotoの効率の良さは取立ての生うにの味
653:デフォルトの名無しさん
18/08/03 20:15:47.20 X+nM2ZWla.net
gotoは良く切れる刀のようなもの。
その怪しい魅力に取り憑かれダークサイドに堕ちた者は数知れず。
654:デフォルトの名無しさん
18/08/03 20:42:44.92 6lqoN/6FM.net
昔のBASICはその鋭い刃しかなかったってことか
655:デフォルトの名無しさん
18/08/03 20:43:55.37 I1YZhHYF0.net
GOSUBとかなかった?
656:デフォルトの名無しさん
18/08/03 20:49:49.72 8VyIMXmS0.net
fortranからの伝統芸
657:デフォルトの名無しさん
18/08/03 21:11:54.24 1LNshpyd0.net
その昔サブルーチンの存在を知らなかった頃
gotoだけでスタックオーバーフロー的な
破綻をさせないで組んだのは結構自分の糧になってる
大人になってコーディング規約を作る側になった時
脱出のみ使用可能ってルールを作ったら
頑なに拒否するメンバーがいて仕事を外れてもらったことがる
宗教じみた反応でちょっと怖かった
658:デフォルトの名無しさん
18/08/03 22:31:36.61 yp/iEsny0.net
gotoなんかよほどの理由がない限り使わない
適切に構造化できないアホが使うとロクなことにならない
原則禁止でいい
659:デフォルトの名無しさん
18/08/03 23:20:08.07 yp/iEsny0.net
>>622なんかではgoto使うケースなんかほぼない
普通にコード書いてればgotoなんかなくなる
後始末の仕方が判定できないコードを書くと
初期化が終わったあと、その初期化がむしろ不要になった場合その後始末が大変になる
知恵遅れほどいちいち不要なgotoを使いたがるからな
#define ERROR_INIT_AHO0 -1
#define ERROR_INIT_AHO1 -2
#define ERROR_INIT_AHO2 -3
#define ERROR_INIT_AHO3 -4
typedef struct tag_aho { char* p1; int fd2; FILE* fp3; } t_aho_t;
int 初期化(t_aho_t** ppt_aho) {
t_aho_t* pt_aho;
*ppt_aho = NULL;
if ((pt_aho = malloc(sizeof(t_aho_t)) == NULL) { return ERROR_INIT_AHO0; }
*ppt_aho = pt_aho;
if ((pt_aho->p1 = malloc()) == NULL) { 後始末(pt_aho); return ERROR_INIT_AHO1; }
if ((pt_aho->fd2 = open()) < 0) { 後始末(pt_aho); return ERROR_INIT_AHO2; }
if ((pt_aho->fp3 = fopen()) == NULL) { 後始末(pt_aho); return ERROR_INIT_AHO3; }
return 0;
}
void 後始末(t_aho_t* pt_aho) {
if (pt_aho == NULL) return;
if (pt_aho->p1 != NULL) { free(pt_aho->p1); }
if (pt_aho->fd2 > 2) { close(pt_aho->fd2); }
if (pt_aho->fp3 != NULL) { fclose(pt_aho->fp3); }
free(pt_aho);
}
660:デフォルトの名無しさん
18/08/03 23:26:42.29 Fao22p7ya.net
gote使う前にそのループを関数化で分ける
661:デフォルトの名無しさん
18/08/03 23:29:40.43 yp/iEsny0.net
正解!
662:デフォルトの名無しさん
18/08/03 23:34:32.92 yp/iEsny0.net
>>648の簡単な例なら最初のmallocのあと
pt_aho->p1 = NULL;
pt_aho->fd2 = -1;
pt_aho->fp3 = NULL;
と初期化しておくだけでどう後始末すれば判定できる
663:デフォルトの名無しさん
18/08/03 23:44:52.51 8VyIMXmS0.net
>>651
後始末ってエラー時だけじゃなく終了時にも使いたいから
未使用かどうかを分かる様にしとくと色々便利だよね
664:デフォルトの名無しさん
18/08/04 00:39:50.00 iUNKVgUH0.net
Linux は、goto でエラー処理をまとめてる
return も、2箇所以上で使っている。
関数の冒頭で、処理しないものを、return ではじいたりしてる
MISRA-C のルール違反
トヨタなんか、MISRA-C で、5/100点とか聞くw
ルールの95% に違反w
665:デフォルトの名無しさん
18/08/04 04:04:56.84 2zclIjyW0.net
>>648
それだと毎回その関数用の構造体を作らねばならなくなっていまいち面倒ではないか?俺は>>622とその方式組み合わせたような感じにしてるよ。
int func()
{
int r = -1;
char *p1 = NULL;
int fd2 = -1;
FILE *fp3 = NULL;
if ((p1 = malloc()) == NULL) goto func_exit;
if ((fd2 = open()) == -1) {
r = -2;
goto func_exit;
}
if ((fp3 = fopen()) == NULL) {
r = -3;
goto func_exit;
}
/* 処理 */
// ここで p1, fd2, fp3 を使い終わった場合は func_exit より後でメモリ開放や
// クローズされないようにするために -1 や NULL を代入する。
r = 0; // 成功
func_exit:
if (p1) free(p1);
if (fd2 != -1) close(fd2);
if (fp3) fclose(fp3);
return r;
}
666:デフォルトの名無しさん
18/08/04 05:10:46.07 YA1hWK5Y0.net
>>647
適切に構造化できないアホさん乙
667:デフォルトの名無しさん
18/08/04 05:53:52.28 I5yMWHTla.net
>>654
goto使わず普通に関数呼べばいいだけでは
668:デフォルトの名無しさん
18/08/04 07:40:44.39 YA1hWK5Y0.net
int func()
{
int r = 1;
//無駄な初期化はしない
char *p1;
int fd2;
FILE *fp3;
p1 = malloc(); if(p1 == NULL) goto
669:malloc_failure; fd2 = open(); if(fd2 == -1) goto open_failure; fp3 = fopen(); if(fp3 == NULL) goto fopen_failure; r = 0; // 成功 //フラグの類は極力使わない fclose(fp3); fopen_failure: close(fd2); open_failure: free(p1); malloc_failure: return r; }
670:デフォルトの名無しさん
18/08/04 08:12:49.13 mQQzn2Q+0.net
gotoを使った方がシンプルで見易いコードになるにも関わらず
頑なに使わない信者さん
>>612の振りで始まったにも関わらずたくさん出てくるね
671:デフォルトの名無しさん
18/08/04 08:15:22.02 mQQzn2Q+0.net
わざわざ専用構造体と専用後始末関数と専用エラーコードをつくってわざわざ複雑にしてるアホもいるし
変数名で自己紹介してるから自覚はあるんだろうけど
672:デフォルトの名無しさん
18/08/04 08:22:18.05 mQQzn2Q+0.net
初期化と後始末を包んだ関数もいるね
十数行で済むシンプルな関数に
何十行使うつもりだか
673:デフォルトの名無しさん
18/08/04 08:32:14.97 cyc8bEPyM.net
Ok, so I'm looking at your code and your code is pure and utter *shit*.
674:デフォルトの名無しさん
18/08/04 08:42:16.32 +vznLLf60.net
goto hell
675:デフォルトの名無しさん
18/08/04 09:32:53.84 AH7fLvgn0.net
>>653
MISRAの話だとそういう制御の話がよく取り上げらてて俺もほとんど守ってないけど、データ変換の話はよく考えられててなかなか為になるよ
676:デフォルトの名無しさん
18/08/04 09:33:52.60 AH7fLvgn0.net
>>656
最初の一文も読めないよのかよ…
> それだと毎回その関数用の構造体を作らねばならなくなっていまいち面倒ではないか?
677:デフォルトの名無しさん
18/08/04 10:21:26.55 CpwGeL+S0.net
アホは後始末しないのもわかったわ
初期化がおわったあと
ファイルあけたらずーっとあけっぱなし
ヒープ作ったら作りっぱなし
なにがおきようが関数抜けたらずーっと放置
まずその部分で完結したコードが書けない
だいたいどんな知恵遅れがコード書いてんのか分かった
アホが自己紹介のコード書いてるしな
678:デフォルトの名無しさん
18/08/04 10:43:47.43 +vznLLf60.net
それは時代遅れの化石言語Cのせい
679:デフォルトの名無しさん
18/08/04 11:02:01.24 CpwGeL+S0.net
やはりな
Cはオレみたいにエレガントなコード書けるヤツでないと使えない
オレみたいなプロフェッショナルでないとムリ
Cは言語規格が非常にシンプルで非常に優れている言語だからな
シンプルなせいで敷居も低い
そのせいでアホでも酷いコードが簡単に書けてしまう
非常に根が深い問題といっていい
680:デフォルトの名無しさん
18/08/04 11:09:25.30 tEqwX/6gd.net
C11で開発してる人はいる?
681:デフォルトの名無しさん
18/08/04 11:14:47.57 /DYnKp4Pa.net
fp = fopen(filen, "rb+");
if(fp == null) {
return 0;
}
func(fpやら処理する価);
fclose(fp);
ファイルオープンに失敗したらもどるし
関数呼び出しの結果がどうだろうと解放されるしgoto使う前にint func(void){return 0;}でわければいい
682:デフォルトの名無しさん
18/08/04 12:43:49.90 2dadGiC9d.net
小さな機能の関数でgotoを避ける為に関数を分けるとか
683:デフォルトの名無しさん
18/08/04 12:44:20.27 2dadGiC9d.net
まさしく宗教ですね
684:デフォルトの名無しさん
18/08/04 12:51:53.82 6FzZ70UGa.net
goto使った方が見易いコードがとかいって関数分けた方が見やすいし戻る場所も関数呼んだ場所で分かりやすい
逆にgotoじゃなきゃ絶対駄目って宗教にはいってるんだろうか
685:デフォルトの名無しさん
18/08/04 13:03:02.54 CpwGeL+S0.net
gotoをさけるためじゃない
適切な初期化と適切な後始末ができる機能を提供している
しかもオレが書いたコードは
全部眺めなくても初期化のしかたと後始末の仕方が分かるエレガントなコードだからな
コードの見通しもよくなる
int void func() {
t_aho_t* pt_aho;
int i_ret;
// 初期化処理
if ((i_ret = 初期化(&pt_aho)) < 0) {return i_ret; }
if (read(pt_aho->fd, p_mem, 1) < 0) { 後始末(pt_aho); return ERROR_INIT_AHO4; }
if (fprintf(pt_aho->fd, "%c\n", *p_mem) < 0) { 後始末(pt_aho); return ERROR_INIT_AHO5; }
// 終了
後始末(pt_aho)
}
なんの処理をやってるコードかすぐに分かる
初期化処理と後始末ばっかりが何行も続くコードなんかだれも読みたくないからな
686:デフォルトの名無しさん
18/08/04 13:06:33.93 F7vd0ILk0.net
何年か前、一連のファイル群を読み、内容の検査をするプログラム書いたことがあった
複数Diskに跨がって処理を行っていたが、このDiskの検査はここで打ち切っていいとなったとき
三重ループから一気に抜けるのにgoto使ったな
goto next_disk;
使わないとそうしないと何分も時間を無駄にすることになるのでね
禁止しても良いけど、処理時間が掛かります、我慢してくれますか?ってことだな
687:デフォルトの名無しさん
18/08/04 13:17:16.66 uWq17v08a.net
三十ループなんてやるのだったら間違い無く関数わけする
しかし、関数分けたら処理hourが時間がかかるって
コンパイラが最適化してくれるだろうに
688:デフォルトの名無しさん
18/08/04 14:02:50.07 AH7fLvgn0.net
>>657
まあ俺もこれかな
>>673
正常終了時に戻り値が不定になるコード書いててエレガントとか言われてもなぁ w
689:デフォルトの名無しさん
18/08/04 14:16:48.41 2dadGiC9d.net
>>675
小さな小さな3重ループでも
3重ループという理由だけで
わざわざ関数を分けるの?
関数を分けるべきか分けないべきかは
内容に大きく依存する
分けないべきな時に
gotoの使い方を知らないという理由で
わざわざ複雑にするのがアホだ
690:デフォルトの名無しさん
18/08/04 14:34:30.00 CpwGeL+S0.net
むしろそんなループは関数で分けるほうが適切だからな
だいたいそういうソースは知恵遅れしか追えないようなコードになってる
そして知恵遅れもどういう動きしてるか分からないようなコードになってる
691:デフォルトの名無しさん
18/08/04 14:34:45.90 2dadGiC9d.net
リソースの確保と解放
リソースが単一関数内でしか使わないのであれば
その関数内で1:1で行うのが一番シンプルで分かりやすくコストも低い
gotoを使えばそれがシンプルに実現出来る場合もある
gotoを使わなくても出来る
そりゃそうでしょうが
問題は出来る出来ないじゃない
コード量、パフォーマンス、使用リソース、
分かりやすさ、シンプルさ、安全性、
メンテナンス性、
>>648のような重いコードが良い場合もあれば
>>657のような軽いコードが良い場合もある
色々な方法を臨機応変に使えるのが良い
692:デフォルトの名無しさん
18/08/04 14:49:05.09 CpwGeL+S0.net
だいたいこの程度の制御文で十分なハズだからな
バカはいちいちgoto使って追えないようなコードにするワケ
int ahoaho_exam() {
for (int i = 0; i_disk_count; ++i) {
switch (i_ret = ahoaho_exam_disk()) {
case SKIP_ALL: return SKIP_ALL;
case SKIP_DISK: continue;
default: break;
}
・・・(ここでもSKIP_ALLが返却かもしれない)
}
return 0;
}
int ahoaho_exam_disk() {
for (int i = 0; i_dir_count; ++i) {
switch (i_ret = ahoaho_exam_dir()) {
case SKIP_ALL: return SKIP_ALL;
case SKIP_DISK: return SKIP_DISK;
case SKIP_DIR: continue;
default: break;
}
・・・(ここでもSKIP_ALL、SKIP_DISKが返却かもしれない)
}
return 0;
}
693:デフォルトの名無しさん
18/08/04 14:50:14.72 CpwGeL+S0.net
(続き)
int ahoaho_exam_dir() {
for (int i = 0; i_file_count; ++i) {
switch (i_ret = ahoaho_exam_file()) {
case SKIP_ALL: return SKIP_ALL;
case SKIP_DISK: return SKIP_DISK;
case SKIP_DIR: return SKIP_DIR;
case SKIP_FILE: continue;
default: break;
}
・・・(ここでもSKIP_ALL、SKIP_DISK、SKIP_DISKが返却かもしれない)
}
return 0;
}
int ahoaho_exam_file() {
・・・(ここでもSKIP_ALL、SKIP_DISK、SKIP_DISK、SKIP_FILEが返却かもしれない)
return 0;
}
簡単にループなんか制御できる
こんなもんにgoto使うとか愚の骨頂
694:デフォルトの名無しさん
18/08/04 15:17:23.18 CpwGeL+S0.net
まず処理を小さな単位に分割する能力がない
初期化処理は初期化処理
終了処理は終了処理
基本的にgoto濫用するヤツは知能に著しい欠陥がある傾向がある
複雑な問題を簡単な単純な問題に分割する能力もない
複雑な問題を簡単な問題へと段階的に詳細化していく能力もない
オツムに致命的な欠陥があるとそうなるワケ
695:デフォルトの名無しさん
18/08/04 16:00:07.62 rXNKJXgT0.net
goto くらいで混乱するような頭が不思議でならない。
gotoもlongjmpも普通に使う。
まあでも一つの関数はA4一枚くらいにはまとめて書くようには言っているが、1mくらい
の長いコードを書くやつもいるし俺も2mくらいなら十分ついていける。
696:デフォルトの名無しさん
18/08/04 16:03:48.29 d5qEm5S/0.net
50行で辛い
100行以上は無理
697:デフォルトの名無しさん
18/08/04 16:06:56.87 F7vd0ILk0.net
>>683
昔、ソースが2万行、各関数が200行~400行と言うプログラムをメンテしてた
しかも、それぞれがグローバル変数とスタティック変数を使いまくり
一つの関数がそのスタティック変数の値で自在に動きが変わるという
698:デフォルトの名無しさん
18/08/04 16:20:59.53 CpwGeL+S0.net
あの程度の初期化処理で重いとか軽いとかいってる時点で
もうね知能の程度がしれるワケ
そんなミジンコ未満の検出できないようなレベルの差よりな
オマエが書いたクソコードのボトルネックになってるアルゴリズムを見直したほうがいいわ
なにがボトルネックになってるか検証する能力がまずないからな
前のクイックセレクトのときも知恵遅れの程度がしれたからな
知恵遅れは目的に応じた適切なアルゴリズムの選択もできない
知恵遅れにテキトーにコード書かかせるとだいたいガッカリするような結果になる
699:デフォルトの名無しさん
18/08/04 16:33:39.62 WQN/l48RM.net
gotoの有無なんかより関数の行数、変数の数、ネストの方を気にして欲しいわ
プログラムなんぞ如何にエントロピー抑えるかだけだからな
700:デフォルトの名無しさん
18/08/04 16:40:55.55 eIBb6soGM.net
半角カナ使う奴がドヤッてて笑うわ
701:デフォルトの名無しさん
18/08/04 18:18:57.70 2zclIjyW0.net
>>657
変数が多くなって途中で出るエラーが増えた時に goto の飛び先も同時に増えるな。
まあ、混乱するぐらい増えたら既に何か書き方がおかしくなっているような気もするがw
702:デフォルトの名無しさん
18/08/04 18:40:31.54 CpwGeL+S0.net
例えば、このコード
URLリンク(ideone.com)
turnaround time ::= 0.0290 sec
turnaround time ::= 3.9219 sec
この差はなにに起因してるか
この差を解消する必要があるならどうすればいいか
そういったことを検証や分析できないからダメなワケ
もうねレスしてることがトンチンカンすぎるワケ
703:デフォルトの名無しさん
18/08/04 19:22:28.12 2dadGiC9d.net
遅いコードしか書けないヤツが何言っても説得力ゼロ
704:デフォルトの名無しさん
18/08/04 19:30:28.40 YA1hWK5Y0.net
gotoを宗教とか言ってるバカに説得力なんてあったのかw
705:デフォルトの名無しさん
18/08/04 19:34:25.24 2dadGiC9d.net
>>686
クイックセレクトwww
わざわざ自分で恥を広めなくても
706:デフォルトの名無しさん
18/08/04 19:34:56.79 CpwGeL+S0.net
知恵遅れの負けず嫌いは異常だからな
知恵遅れは知恵遅れであることを自覚できない
だから知恵遅れは知恵遅れのまま
一生知恵遅れのまま
頭悪い低学歴底辺ほど自尊心だけは強い
もともとなにもないからっぽだからな
707:デフォルトの名無しさん
18/08/04 19:36:15.87 2dadGiC9d.net
明らかに適さないアルゴリズムを
「クイックセレクトを選ぶのが正解」
とか言い出したアホ
まだこの発言が正しいと思ってるわけじゃないよなwww
708:デフォルトの名無しさん
18/08/04 19:38:00.61 2dadGiC9d.net
速度が要求される低レベル処理に対して
遅い関数を使うアホ
709:デフォルトの名無しさん
18/08/04 19:38:10.32 YA1hWK5Y0.net
形容詞に比較をつけない世間知らずが人様つかまえてアホとかもうあいた口が塞がらない
710:デフォルトの名無しさん
18/08/04 19:38:18.83 CpwGeL+S0.net
クイックソートとかいってた池沼がなんかいってるわ
711:デフォルトの名無しさん
18/08/04 19:38:36.44 2dadGiC9d.net
おまけに学歴コンプ
712:デフォルトの名無しさん
18/08/04 19:40:09.36 2dadGiC9d.net
クイックソートを使うのはアホ
と最初に書き込んだのは私だけど
自分以外は全て同一人物だと思ってるのか?
713:デフォルトの名無しさん
18/08/04 19:42:04.94 2dadGiC9d.net
おれの書き込みを読めば
>>692 が勘違いということがわかる
714:デフォルトの名無しさん
18/08/04 19:43:24.56 YA1hWK5Y0.net
宗教だからね
教祖様が勘違いということにしたければ
いくらでもそういうことにできる
つきあってらんねー
715:デフォルトの名無しさん
18/08/04 19:43:52.39 2dadGiC9d.net
>>689
エラーが増えても修正は2箇所だけ
半角君のコードは何箇所?
716:デフォルトの名無しさん
18/08/04 19:48:39.81 YA1hWK5Y0.net
>>694
自己紹介乙
ここはム板
技術的な話に全く無用のアホワード連発して
何がしたい
717:デフォルトの名無しさん
18/08/04 19:57:51.70 CpwGeL+S0.net
URLリンク(ideone.com)
別の知恵遅れがお勧めしてた方法では(総なめ)
1000万件いかないうちに上位0.1%ですらWebシミュレータが拒否するほど酷い結果になってる
turnaround time ::= 4.8076 sec
※ 5秒越えたら実行されない
オレのエレガントなコードでは知恵遅れが最悪のケースといってたデータでも同じ条件も余裕
URLリンク(ideone.com)
turnaround time ::= 0.0534 sec
turnaround time ::= 0.0126 sec
718:デフォルトの名無しさん
18/08/04 20:01:49.72 CpwGeL+S0.net
やっぱりなPGなんか日本では低学歴しかやってない
719:デフォルトの名無しさん
18/08/04 20:03:50.94 YA1hWK5Y0.net
自己紹介乙
類は友を呼ぶ
つきあってる範囲がそういうこと
というだけ
720:デフォルトの名無しさん
18/08/04 20:03:55.23 CpwGeL+S0.net
低学歴ですと自白してるヤツが何人かいるわ
わかりやすい
721:デフォルトの名無しさん
18/08/04 20:04:35.09 YA1hWK5Y0.net
おまえだよ、おまえ
722:デフォルトの名無しさん
18/08/04 20:05:02.83 CpwGeL+S0.net
よほど低学歴なのが悔しいらしいな
残念なことに低学歴なのはレスからすぐにわかっちゃうワケ
バレてないと思ってるわけか。。。
723:デフォルトの名無しさん
18/08/04 20:06:23.48 YA1hWK5Y0.net
高学歴が1人でもいたら
おまえの主張は破綻する
つーかセンズリこき野郎はwinnyくらい使ってるだろ?
724:デフォルトの名無しさん
18/08/04 20:13:46.86 QBtHPmTG0.net
コンストラクタ/デストラクタの機構があれば楽できるのにな と思うことはある
725:デフォルトの名無しさん
18/08/04 20:15:59.70 2dadGiC9d.net
>>705
トップ3個だぞ
あと最悪データの意味わかる?
なんで最悪データの方が速い?
726:デフォルトの名無しさん
18/08/04 20:18:25.93 CpwGeL+S0.net
そもそもクイックセレクトがどんなアルゴリズムかすら分かってない
だから最悪な条件がどういう状態をさしてるのか分かってすらない
まあお話にならないわ
まともな教育を受けてないヤツと
話がかみあうわけがない
727:デフォルトの名無しさん
18/08/04 20:19:50.04 YA1hWK5Y0.net
低学歴→まともな教育受けてない
ぶははは
728:デフォルトの名無しさん
18/08/04 20:22:49.07 CpwGeL+S0.net
低学歴じゃなかったら
最低でも最悪の条件が分かってる上で
議論に参加するからな
そんなことも分からずに低学歴でもテキトーな書き込めるのが2ちゃんねるだからな
バレてないと思ってるらしいが低学歴とニートというのはレスからすぐにバレる
残念なことにな
729:デフォルトの名無しさん
18/08/04 20:23:44.55 2dadGiC9d.net
>>714
お前の言う最悪な条件の方が4倍以上速い
おまえの最悪な条件の定義は何だ?
730:デフォルトの名無しさん
18/08/04 20:25:19.01 CpwGeL+S0.net
定義?
なにいってんのコイツ
>>690 をみて
オレがなにをいってるか
理解できないしな
ココが知恵遅れの限界
731:デフォルトの名無しさん
18/08/04 20:35:20.71 jfaT+4IfM.net
>>712
だね
C++ならスマートポインタ、C#ならusingでもっと楽にかつ確実にやれるのになにアホな言い合いしてるんだろうって感じ
732:デフォルトの名無しさん
18/08/04 21:07:34.69 YA1hWK5Y0.net
低学歴とニートがすぐわかるなら具体的に名指ししてみな
誰にでも再検証できるように
つまり工学者として当たり前の様式で
733:デフォルトの名無しさん
18/08/04 21:27:00.60 RenjJImm0.net
quickse;ectの件(ELEMS=20,TOPSS=10)で試すとp2の結果が違うのだが
初期値: 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
10.0 9.0 8.0 7.0 6.0 5.0 4.0 3.0 2.0 1.0
結果:
>>690: 10.0 9.0 9.0 8.0 8.0 7.0 7.0 6.0 6.0 5.0
>>705: 10.0 9.0 8.0 9.0 8.0 7.0 6.0 7.0 6.0 5.0
734:デフォルトの名無しさん
18/08/04 21:30:24.21 CpwGeL+S0.net
両方とも選択された要素の順序は保証されてない
そういうアルゴリズムだ
ソートすれば同じ結果になる
上位の抽出結果のソートなんか一瞬でおわる
735:デフォルトの名無しさん
18/08/04 21:35:47.02 mQQzn2Q+0.net
出題は上位3個で要素数が可変
736:デフォルトの名無しさん
18/08/04 21:43:01.41 rXNKJXgT0.net
Cが優れているのでC++なんて全く必要性を感じなかったが、gotoで頭が混乱する
とか1mのコードくらいで頭が混乱するような人はC++をぜひ使ってみるといいと思う。
最近C++を使ってみて驚いた。Cと何ら変わらない低レベルコードを吐き出す
低レベル言語のくせに機能的には100倍も優れている。
その優れた機能を一切使わなくてもいいが、namespaceやクラスをパッケージ化の
機能としてだけつかってもCよりは随分楽に管理できる。
Cの場合はパッケージにして頭の悪い人でも分かりやすくするにはサブルーチンを使う
以外に方法がない。しかしC++はnamespaceでスコープを自由に制限できてパッケージ化
ができる。しかも50行程度に小さく刻んでもコードには何の影響も与えない。
737:デフォルトの名無しさん
18/08/04 21:45:18.43 mQQzn2Q+0.net
URLリンク(ideone.com)
0.01423812秒
半角君のコードの4倍くらいの速さ
738:デフォルトの名無しさん
18/08/04 21:47:30.05 mQQzn2Q+0.net
高速
コードサイズ小
1回スキャン
非破壊
739:デフォルトの名無しさん
18/08/04 21:50:33.63 rXNKJXgT0.net
>>685
そうだよ。昔の人はそれでも平気だったんだよ。昔の人は賢かった。まあわが社では
いまでもそれは普通にやっている。
わが社の社員は現代人だから頭は変わらないと思うが特別根気があるのだろう。
だから賢くなる。つまり昔の人も頭が良かったというよりも根気があったのだろうと思う。
740:デフォルトの名無しさん
18/08/04 21:50:37.85 mQQzn2Q+0.net
半角君のコード
低速 (最悪値は特に)
コードサイズ大
複数回スキャン
破壊
741:デフォルトの名無しさん
18/08/04 21:53:40.18 CpwGeL+S0.net
オレのエレガントなコードに対して
最悪値になるデータ作ってみ
1000万件中上位3件程度しか抽出できないコード書いても意味ないからな
お題どおりなら3%は抽出できないといけない
上位30万件は抽出できないとな
742:デフォルトの名無しさん
18/08/04 21:56:59.42 mQQzn2Q+0.net
あ、なんか間違った
まあ時間は変わらんでしょう
743:デフォルトの名無しさん
18/08/04 21:58:48.83 CpwGeL+S0.net
URLリンク(ideone.com)
オレのエレガントなコードでは
上位30万件でもこの速さ
turnaround time ::= 0.0534 sec
turnaround time ::= 0.0126 sec
オツムが弱いのがコードではまず実現は不可能
まず処理が終了しない
744:デフォルトの名無しさん
18/08/04 22:01:03.23 CpwGeL+S0.net
なんか更新されてないわ
URLリンク(ideone.com)
turnaround time ::= 0.1077 sec
turnaround time ::= 0.0172 sec
オレのエレガントなコードにはまず勝てない
745:デフォルトの名無しさん
18/08/04 22:02:32.21 mQQzn2Q+0.net
「最悪値」って確率は関係ないから
文字通り「最悪値」
勝手に条件を変えてwww
出題は上位3個
出題後の書き込みもずっと上位3個という前提
746:デフォルトの名無しさん
18/08/04 22:03:24.81 CpwGeL+S0.net
ランダムな値使ってるのに
まず最悪値になりようがない
だからな最悪値になるデータ作ってみろよ
747:デフォルトの名無しさん
18/08/04 22:05:26.79 mQQzn2Q+0.net
修正したら速くなっちゃった
URLリンク(ideone.com)
0.01262593秒
748:デフォルトの名無しさん
18/08/04 22:06:09.00 CpwGeL+S0.net
知恵遅れはランダムの値といってるから
入力値に疑似乱数使ってると思ってるかもしれないが
そもそもピボットの選択がランダムという意味だからな
749:デフォルトの名無しさん
18/08/04 22:06:54.29 mQQzn2Q+0.net
「最悪値」って確率は関係ないから
文字通り「最悪値」
750:デフォルトの名無しさん
18/08/04 22:07:29.19 CpwGeL+S0.net
だからな30万件抽出できるコード書いてみ
751:デフォルトの名無しさん
18/08/04 22:09:41.04 mQQzn2Q+0.net
--普通の人のコード--
高速
コードサイズ小
1回スキャン
非破壊
--半角君のコード--
低速 (典型例で4倍の時間、最悪値は特にひどい)
コードサイズ大
複数回スキャン
破壊
752:デフォルトの名無しさん
18/08/04 22:12:28.07 CpwGeL+S0.net
0.01秒オーダーが4倍とか議論不要なレベルだからな
そもそも知恵遅れが書いたコードは条件が少しかわるだけで
待ってても結果が戻ってこないからな
753:デフォルトの名無しさん
18/08/04 22:13:07.54 +vznLLf60.net
データふやして比較しよう
754:デフォルトの名無しさん
18/08/04 22:15:28.18 mQQzn2Q+0.net
>>740
恥の上塗りwww
お前の負けwww
755:デフォルトの名無しさん
18/08/04 22:16:12.21 CpwGeL+S0.net
知恵遅れの精神的勝利きたわ。。。
756:デフォルトの名無しさん
18/08/04 22:45:56.56 +Ac7xD+T0.net
半角また負けたのか…
757:デフォルトの名無しさん
18/08/04 22:47:55.10 CpwGeL+S0.net
オレのエレガントなコードには勝てない
要素数
758:,抽出数,エレガント(sec),アホ(sec) 10000,300,0.0000,0.0040 20000,600,0.0000,0.0150 30000,900,0.0000,0.0330 40000,1200,0.0000,0.0590 50000,1500,0.0000,0.0920 60000,1800,0.0010,0.1330 70000,2100,0.0000,0.1760 80000,2400,0.0010,0.2300 90000,2700,0.0010,0.2920 100000,3000,0.0020,0.3620 110000,3300,0.0020,0.4360 120000,3600,0.0020,0.5300 130000,3900,0.0020,0.6080 140000,4200,0.0020,0.7030 150000,4500,0.0030,0.8170 160000,4800,0.0020,0.9260 170000,5100,0.0020,1.0470 180000,5400,0.0020,1.1740 190000,5700,0.0030,1.3080 200000,6000,0.0020,1.4490 210000,6300,0.0020,1.5970 220000,6600,0.0020,1.7690 230000,6900,0.0020,1.9170 240000,7200,0.0030,2.0870 250000,7500,0.0030,2.2660 260000,7800,0.0050,2.4590 270000,8100,0.0040,2.6380 280000,8400,0.0020,2.8350 290000,8700,0.0010,3.0500 300000,9000,0.0020,3.2750
759:デフォルトの名無しさん
18/08/04 23:17:38.19 CpwGeL+S0.net
やっと処理が終わった
アホのコードのせいでCPUが熱くなったわ
数10万件レベルでコレだからな
↓処理結果
URLリンク(fast-uploader.com)
一部抜粋
950000,28500,0.0140,33.5910
960000,28800,0.0100,33.4880
970000,29100,0.0190,34.1070
980000,29400,0.0080,34.8320
990000,29700,0.0100,35.4970
1000000,30000,0.0080,36.5600
↓グラフ
URLリンク(i.imgur.com)
知恵遅れ息してない
760:デフォルトの名無しさん
18/08/04 23:21:13.53 F7vd0ILk0.net
いつまでこの話続けるの?
専用スレ立てたら?
761:デフォルトの名無しさん
18/08/05 00:06:32.62 yKLkGD1M0.net
>>746
元の課題を書き換えて勝利宣言とか流石に恥ずかしすぎて真似できんわ
762:デフォルトの名無しさん
18/08/05 01:04:35.95 9bzcKYpVM.net
>>747
休日丸一日張り付いてるとこ見ると、他にやることないみたいだし、多分まだ続くで
763:デフォルトの名無しさん
18/08/05 01:45:43.20 VRzYU/IV0.net
上位3件で比較したらどうなるん?
764:683
18/08/05 05:43:14.02 cdvogGHQ0.net
>>703
俺は半角君ではないが、あれの場合も2ヵ所じゃないか?
初期化含めると3か所か。
765:デフォルトの名無しさん
18/08/05 05:49:42.07 cdvogGHQ0.net
>>712>>719
まあ、他の言語使えばいいだけだな。
最終的なコードは同じになるだろう。それを自動でやるかプログラマが作るかの違いしかない。
C++も初期の頃はC言語へのコンバータだったしな。
766:デフォルトの名無しさん
18/08/05 07:52:08.09 5rt28jG50.net
>>751
#define
構造体
関数2個
計4か所
修正面倒
実際の半角君のコードもそんな面倒なコードにはなってない
767:デフォルトの名無しさん
18/08/05 07:56:35.30 cQ22SoWZ0.net
暗澹として気持ちになる
半角君の言い分にも理はある
顧客がどういう方向にものごとを拡張したいと言い出すかなんてわからないんだ
なんでいりもしないくそコード増やしてんだと罵ることもできるし
これをスケーラビリティのある優れたコードだといって、もう一方クソ呼ばわりすることもできる
でも、書いたコードが結局どう評価されるかは将来を見通す能力で決まるんじゃない
顧客がこっちの様子みて事後的にきめてるんだ
768:デフォルトの名無しさん
18/08/05 08:03:17.72 5rt28jG50.net
>>679
769:デフォルトの名無しさん
18/08/05 08:09:08.23 5rt28jG50.net
>>705のコードにエラー時の処理を入れるのに
いちいち>>648にするのか?
使い分け
gotoの使いどころでは使う
770:デフォルトの名無しさん
18/08/05 08:17:28.22 5rt28jG50.net
多重ループを抜けるのに
半角君はどう書くつもりたろうか
switch / case からループを抜ける
これも良くあるコード
771:デフォルトの名無しさん
18/08/05 08:34:00.38 UtRwebov0.net
ループの中を関数化したうえで case 句からは return で即脱出するのかな
勝手な想像だけど
772:デフォルトの名無しさん
18/08/05 08:56:17.59 AVPuy+2E0.net
ここ喧嘩ばっかだから他所行くかーと思ってC++スレ行ったらそこでも喧嘩しててワロタ
773:デフォルトの名無しさん
18/08/05 08:57:44.72 RKME5Hq50.net
一緒にすんな失礼な
発 者 同 . 。_ ____ 争
生 同 .じ . /´ (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./` }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / ∨ ` ̄
/ ..:.:./ 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.: }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
774:デフォルトの名無しさん
18/08/05 10:50:56.85 cQ22SoWZ0.net
というかだ
randとquickselectどっからコピペしてきたのか正直にいいなさい
非の打ちどころなく最適化されたロジック
筋のいい関数分割
的確な規約にのっとった命名
正確な英語
おまえがつくったのbakaとallocとfree_dataだけだろ
関数ごとにあまりにも作成者の知性差がありすぎる
775:デフォルトの名無しさん
18/08/05 10:53:47.86 cQ22SoWZ0.net
partitionの中はそうでもないか
776:デフォルトの名無しさん
18/08/05 10:57:17.82 ekimy5CU0.net
質問者そっちのけで
議論だけは続きます
いつものパターン
777:デフォルトの名無しさん
18/08/05 11:03:06.42 cQ22SoWZ0.net
問題は解決してるじゃない
778:デフォルトの名無しさん
18/08/05 11:15:46.84 cQ22SoWZ0.net
そもそもどれが質問だったかわからない
779:デフォルトの名無しさん
18/08/05 11:25:14.55 ekimy5CU0.net
何を議論しているのかも誰も分からない
780:デフォルトの名無しさん
18/08/05 11:25:39.76 BwCU11k30.net
URLリンク(ideone.com)
コレで上位3件と
コレで上位3%の比較ができる
ちなみにアホのコードが混じってるせいでWebでは動かない
URLリンク(en.wikipedia.org)
ちなみにコードはコレみながらちゃんとオレが作ったからな
あとな quickselect は見直してたら一箇所コードに誤りがあったわ
動作自体に大きな影響はない
それがなんでかは、それでどう動作がかわわるか、それがどういう修正なのかは
きっとこのスレの知恵遅れたちには分からない
疑似乱数生成器は普通にxorshiftコピって作ったわ
あれならインターネッツにいるようなどんなバカが書いても同じ結果になるからな
その部分だけはあってるわ
で、あとは、テスト評価用関数の名前がどうこうしかないワケか
まあオツムの程度がよくしれるわ
781:デフォルトの名無しさん
18/08/05 11:51:24.52 LOW4gkdBd.net
1個も自分で考えたアルゴリズムが無いっていう
選択も正しくない
782:デフォルトの名無しさん
18/08/05 11:54:12.46 aSQnOhv+0.net
ハンカク君「100件から上位3件のソートじゃダメだ!
100万件から上位3万件を抽出�
783:i未ソート)できるクイックセレクトがエレガント!」 全角君「1億件をソートするにはそれじゃダメだろ ヴォケが! 『マルチコアの並列ソート』こそがグレイシャス!」 二 倍 角 君 「 ダ ァ ホ が ! 1 0 0 億 じ ゃ ! 量 子 C P U で 超 並 列 じ ゃ ー い ! !」 今後の展開を想像したらわくわくしてきた にしても 今日もあっついなぁ……
784:デフォルトの名無しさん
18/08/05 11:56:40.45 LOW4gkdBd.net
元は100個だか1000個だかだよ確か
785:デフォルトの名無しさん
18/08/05 12:05:44.10 AVxRrUx/0.net
なんかしょうもない争いしてんのな
どんぐりの背比べ
786:デフォルトの名無しさん
18/08/05 12:19:17.66 ekimy5CU0.net
病気の発作みたいなもの
しばらく放置して、本人が落ち着くのを待つ
かまえばかまうほど、病気は進行する
787:デフォルトの名無しさん
18/08/05 12:25:21.31 BwCU11k30.net
またCPUが熱くなったわ
今回はvmwareで動作してるLinuxで動作させた
↓処理結果
URLリンク(fast-uploader.com)
上位3件
URLリンク(i.imgur.com)
上位3%
URLリンク(i.imgur.com)
もうねオレのコードがエレガントすぎて困るわ
キミラとはレベルが違うワケ レベルが
キミラとはステージが違うワケ ステージが
分かった?
788:デフォルトの名無しさん
18/08/05 12:30:52.32 LOW4gkdBd.net
よほどくやしかったんだろうね
789:デフォルトの名無しさん
18/08/05 12:35:47.77 BwCU11k30.net
あとな、知恵遅れが自分で新しいアルゴリズムを考えるとか
1億年たってもムリだからな
オレレベルの人間ぐらいにならないとムリ
このスレにいるような知恵遅れを遥かに凌駕する先人が
考えたアルゴリズムすら使いこなせてない
はっきりいってな低学歴知恵遅れやクソニートは
自己評価が高すぎるワケ
低学歴知恵遅れやクソニートは自分のカスっぷりの自覚がない
まずココが問題なワケ
そんな知恵遅れが新しいアルゴリズムとかな逆立ちしてもムリだからな
知恵遅れや凡人はまず適切なアルゴリズムを選択できるようになるのが先だからな
790:デフォルトの名無しさん
18/08/05 12:37:41.32 BwCU11k30.net
日本ではPGは低学歴底辺しかならない職業だからな
しょうがないという側面もなある
おのずと低学歴底辺の頭悪いのばっかりになる
791:デフォルトの名無しさん
18/08/05 12:43:27.32 LOW4gkdBd.net
長文で自己紹介乙
792:デフォルトの名無しさん
18/08/05 12:57:32.94 cQ22SoWZ0.net
まちがいがあったんだろうか?
相手が間違ってるかもしれないのに知ったげして
793:デフォルトの名無しさん
18/08/05 13:07:24.80 BwCU11k30.net
いつもいってることだが
レスしてるヤツが低学歴か
レスしてるヤツがニートかなんかな
レスみればすぐに分かることだからな
残念なことにそれをいくら隠そうとしても
隠すことはできない
本人はバレてないつもりかもしれないが
チョンバレなワケ
794:デフォルトの名無しさん
18/08/05 13:12:35.48 cQ22SoWZ0.net
お前の書き込みが病的だからお前が特定されてるだけだろ
ほかのやつの学歴なんか一切わからんわw
795:デフォルトの名無しさん
18/08/05 13:22:37.54 yCkv1Zf90.net
#include <stdio.h>
int func(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
return(func(n-2)+func(n-1));
}
int main()
{
printf ("%d",func(4));
return 0;
}
これの出力は3なんだけど
これ、永久的数が増えていく気がするんだけど。。。
どういう考え方で3になるか教えてほしい
796:デフォルトの名無しさん
18/08/05 13:28:13.17 LOW4gkdBd.net
4
2, 3
0, 1, 1, 2
0, 1, 1, 0, 1
797:デフォルトの名無しさん
18/08/05 13:29:48.92 yCkv1Zf90.net
>>782
足し算の合計としてじゃなく2つのfuncとして返されるってこと?
そしてその連続ってこと?
798:デフォルトの名無しさん
18/08/05 13:31:08.57 aSQnOhv+0.net
>>781
フィボナッチだってことは解ってる?
URLリンク(ja.wikipedia.org)
func(0) = 0
func(1) = 1
func(2) = func(0) + func(1) = 0 + 1 = 1
func(3) = func(1) + func(2) = 1 + 1 = 2
func(4) = func(2) + func(3) = 1 + 2 = 3
799:デフォルトの名無しさん
18/08/05 13:41:13.29 yCkv1Zf90.net
>>784
え、概念はわかった
func(0) = 0
func(1) = 1 ってどこからわかるんだ?
returnではないよね?
800:デフォルトの名無しさん
18/08/05 13:43:51.70 W7/dI3kf0.net
return 0;ってはっきり書いてあるやろ
801:デフォルトの名無しさん
18/08/05 13:45:55.07 yCkv1Zf90.net
>>786
え、リターンって 定型文というか終わりを意味するだけだと思ってた。
802:デフォルトの名無しさん
18/08/05 13:52:07.99 BwCU11k30.net
#include <stdio.h>
int func(int n, int stack)
{
++stack;
if(n==0) {
for (int i = 0; i < stack; ++i) printf(" ");
printf("[%d] returned func(%d) -> %d\n", stack, n, 0);
return 0;
}
if(n==1) {
for (int i = 0; i < stack; ++i) printf(" ");
printf("[%d] returned func(%d) -> %d\n", stack, n, 1);
return 1;
}
int i_ret = func(n-2, stack) + func(n-1, stack);
for (int i = 0; i < stack; ++i) printf(" ");
printf("[%d] returned func(%d) + func(%d) -> %d\n", stack, n - 2, n - 1, i_ret);
return(i_ret);
}
int main()
{
printf ("%d",func(4, 0));
return 0;
}
このスレの知恵遅れがどうこういうだけムダ
コレ動かして自分で考えればバカでもチョンでも分かる
803:デフォルトの名無しさん
18/08/05 13:57:48.29 aSQnOhv+0.net
>>787
return は関数を抜けて 呼び出し元に戻り値を返すんだよ
804:デフォルトの名無しさん
18/08/05 14:15:22.97 RKME5Hq50.net
>>787
なぜ、そんなものが存在するのか
つまり、必要なのか
ただブレースを閉じるだけではダメなのか
疑問を持ったことはないのか?
805:デフォルトの名無しさん
18/08/05 14:56:39.59 BwCU11k30.net
URLリンク(ideone.com)
コレでfuncが再帰による深さ優先探索が行われてる様子も分かるハズ
ココまで分かるならこの部分の課題は終わりのハズだ
806:デフォルトの名無しさん
18/08/05 16:39:28.00 HLNQqKaSM.net
ヒープソートの参照のみならオーダー(計算量)はどうなるか。
先着順
当てたらアマギフ
807:デフォルトの名無しさん
18/08/05 16:43:08.34 cdvogGHQ0.net
ダニング=クルーガー効果か。こういうのも既に研究されているんだな。
URLリンク(ja.wikipedia.org)
808:デフォルトの名無しさん
18/08/06 01:43:03.72 DWW9arOl0.net
低能事件に続き5chでも半角事件が来るのか?
809:デフォルトの名無しさん
18/08/06 17:48:10.34 ODvV2Pda0.net
俺も何度かここで質問してるが、ム板にしては答えちゃんと返してくれるスレなんだよ。
ただただ質問者と回答者以外の第三者の介入が必ず発生して荒れ出すだけで・・・w
810:デフォルトの名無しさん
18/08/06 20:11:30.49 Nuh0gMtFM.net
>>791
なんでindent() のforの++iってなんか意味あるの?
811:デフォルトの名無しさん
18/08/06 20:12:03.76 PKEcOyRea.net
2ch慣れというか5ch慣れしてスルーカパワーが高まった人でないと中々難しいのかも知れんのう
812:デフォルトの名無しさん
18/08/06 22:34:10.82 d11E19u/0.net
一番上と内部でレベルが合ってるように見えてて実はズレてる気持ち悪さ
中に入れるか呼び出し場所で外に書くかどっちかにしる
813:デフォルトの名無しさん
18/08/06 23:08:00.95 d11E19u/0.net
あとひどいのがprintしてる"return"の後ろの文字列の示すところが変わってること
固定値返してるところでfunc(n) -> n みたいにさらに下位を呼び出してるみたいにとれる書き方がしてあって
return func(2-2) + func(2-1) -> 1 とか計算内容を書いてるところと一貫性がとれてない
814:デフォルトの名無しさん
18/08/06 23:12:24.56 d11E19u/0.net
でも計算内容を展開してるだけだからいいっちゃいいのか
うーん
815:デフォルトの名無しさん
18/08/06 23:39:21.68 9v3Lf9b90.net
全然ずれてない
コールスタックの深さとぴったり一致してる
オツムが足りない知恵遅れのために
さらにムダな補助出力をつけてやったぞ(AとB)
URLリンク(ideone.com)
ここまでくると
メクラやツンボを誘導するのに近い。。。
↓この課題は、最終的には、コレにおちつくことになる
(なんでかは、nを増やせばきっと知恵遅れでも分かるとは思ってたからな)
URLリンク(ideone.com)
補助出力がないとなにやってるのかすら分からないメクラやツンボでは
コレがなにやってるかもきっと理解できないわ
u_l、u_r、u_yしかないからな
知恵遅れは再帰が理解できてないのが、よおく分かったわ
816:デフォルトの名無しさん
18/08/06 23:51:48.07 d11E19u/0.net
余計紛らわしくなっとるわ!同じレベルで連続でリターンすんなしw
関数の戻りと呼び出し先の戻りがごちゃごちゃに
817:デフォルトの名無しさん
18/08/07 00:04:14.76 5k05bDr80.net
URLリンク(ideone.com)
知恵遅れ対応はコレが限界
818:デフォルトの名無しさん
18/08/07 00:19:28.13 bqsBgWbb0.net
とてもわかりよいです
819:デフォルトの名無しさん
18/08/07 00:21:00.39 JmB8aria0.net
フィボナッチごときでよくもまあ話題が続くねえ
820:デフォルトの名無しさん
18/08/07 00:22:04.86 JmB8aria0.net
一般項の求め方くらい学校で習わなかった?
821:デフォルトの名無しさん
18/08/07 12:37:07.91 r/NXRNz/a.net
記憶から消滅
822:デフォルトの名無しさん
18/08/07 12:49:11.36 sFIHfBH10.net
一般項は実数を扱うせいで誤差が出るから論外
823:デフォルトの名無しさん
18/08/07 12:50:36.34 1Vrs+If4d.net
誤差www
そりゃアホが作れば誤差が問題になるだろうねえwww
824:デフォルトの名無しさん
18/08/07 12:51:27.81 1Vrs+If4d.net
アホは素直に加算を繰り返せば良いよ
825:デフォルトの名無しさん
18/08/07 17:18:17.21 r/NXRNz/a.net
あれ?今日は半角にしないんだ。
826:デフォルトの名無しさん
18/08/07 19:11:24.43 PQcYGo+5d.net
おれは半角野郎じゃない
半角野郎はアホだから無理
827:
18/08/07 19:21:21.20 4JY7xbU70.net
>>808
√5 の係数を整数で持てばいいのでは?
F_n = (φ^n - (-φ)^(-n)) / √5, φ=(1 + √5)/2
828:デフォルトの名無しさん
18/08/07 20:18:00.72 8+yE0dxd0.net
富士山麓オウム啼く・・・あれ?怖いなこれ
829:デフォルトの名無しさん
18/08/07 22:59:36.12 5k05bDr80.net
URLリンク(ideone.com)
やはり
整数を足すにかぎるわ
830:デフォルトの名無しさん
18/08/07 23:08:45.73 5k05bDr80.net
IEEEの倍精度(64bit)で15~16桁程度の精度
つまりdouble、>>815の精度が概ねその程度
64bit整数なら19桁はいける
831:デフォルトの名無しさん
18/08/07 23:43:22.81 JmB8aria0.net
相変わらずアホだね
視野が狭い
832:デフォルトの名無しさん
18/08/07 23:47:20.78 oCoNsgzD0.net
ルートとn乗求める処理オーダーってどんなんじゃろ
64bitまでならルート使ったほうが早いだろうけど
結局桁数が大きくなったらルートとってn乗してって結構処理重そう
じつは全部足し算したほうが早かったりして
833:デフォルトの名無しさん
18/08/08 05:09:15.02 d90b/R1Y0.net
重いのはべき乗のほうだね
834:デフォルトの名無しさん
18/08/08 07:15:16.24 UEEWq45u0.net
nが大きい場合の計算オーダー
足し算の繰り返しの場合 : n^2
一般項を普通に計算した場合 : n (log n)^2
835:デフォルトの名無しさん
18/08/08 09:01:38.18 IJcCYJpk0.net
足し算の繰り返し:O(n)
一般項:O(1)
じゃないの?
836:デフォルトの名無しさん
18/08/08 12:44:41.36 DBa81iRmd.net
加算、乗算、expなどの計算がO(1)で出来る範囲ならそうだね
837:デフォルトの名無しさん
18/08/08 12:50:59.40 CvCa/3U5M.net
>>822
まずはO(1)の定義を調べようか…
838:デフォルトの名無しさん
18/08/08 12:52:04.40 DBa81iRmd.net
お前より詳しいと思うよ
839:デフォルトの名無しさん
18/08/08 15:07:25.41 FOgunlIR0.net
お前のほうが可愛いよ
840:デフォルトの名無しさん
18/08/08 16:09:12.75 H7dQbZh7d.net
ありがと
841:デフォルトの名無しさん
18/08/08 18:58:
842:28.93 ID:UEEWq45u0.net
843:デフォルトの名無しさん
18/08/08 19:03:59.97 UEEWq45u0.net
じゃあ多倍長演算を用いて任意のnに対して正確に求める場合を考える
以下は基礎知識
n番目のフィボナッチ数の桁数はnに比例する
乗算の計算オーダーは、桁数をnとすると n log(n)
ルートの計算オーダーは n log(n)
n乗は、オーダーlog(n)回の乗算で求まる
以上より、一般項の式の通りまじめに計算しても
オーダー n (log n)^2 で計算できる
844:デフォルトの名無しさん
18/08/08 19:10:00.90 UEEWq45u0.net
工夫すると、計算オーダーを n log n にすることが出来る
行列の形でフィボナッチ数列の漸化式を記述すると
|0 1|^n |0|
|1 1| . . |1|
でn番目とn+1番目のフィボナッチ数が求まることがわかる
この式を用いれば
計算オーダー n log n で正確に n 番目のフィボナッチ数を求めることができる
845:
18/08/08 19:13:46.21 35SEMuEM0.net
>>816,818,820
漸化式 f(n+2)=f(n+1)+f(n) から一般のf(n) を求めるオーダーはΟ(n)
一般式 >>813 から求めるオーダーはΟ(log n)
だと思う
スレリンク(tech板:49番)
c を定数として、c^n を求めるにはΟ(log n) でいける
846:デフォルトの名無しさん
18/08/08 19:30:35.51 xXLtNtIVd.net
元は>>781の初心者の質問で
計算オーダーとか全く関係なかったんだけど
半角君があまりに無知な癖に自信過剰なので
つい書いてしまった
847:デフォルトの名無しさん
18/08/08 19:34:04.93 xXLtNtIVd.net
>>830
それは固定有効精度の場合
固定有効精度であればオーダーは1で計算出来る
>>827参照
848:デフォルトの名無しさん
18/08/08 19:36:02.18 xXLtNtIVd.net
固定精度であれば
四則演算もexpも丸めも全て
値によらず固定時間で計算出来る
849:デフォルトの名無しさん
18/08/08 19:41:56.80 xXLtNtIVd.net
てことで、
半角君に3勝ですね
コーディング
アルゴリズム
数学
全て勝ってしまった
まあ学歴も勝ってると思うので4勝か
850:デフォルトの名無しさん
18/08/08 19:42:03.28 bSSLrH090.net
>>830
桁数分のnかからんの?
851:
18/08/08 20:30:18.66 35SEMuEM0.net
>>835
>>832 の指摘のとおり、固定有効精度だったら >>835 になるようです
>>827 は、ちょっと理解が及びません…
852:デフォルトの名無しさん
18/08/08 21:38:16.32 Iprz26WCK.net
頭悪いバカが半角に勝ったつもりでいる
半角はこのスレでは間違いなく天才
他のやつらがお話にならないぐらい頭悪いからな
典型的な頭悪いやつが半角に勝とうと必死になってる
853:デフォルトの名無しさん
18/08/08 23:31:41.87 bSSLrH090.net
ここまで一般式も行列もコードなし多倍長も
まだはじまってもいない
854:デフォルトの名無しさん
18/08/08 23:37:23.86 85EJM9li0.net
ISO C99に準拠して、なおかつある程度開発が盛んなOSSを教えてください。
ソースコードが綺麗なことで有名ならなお嬉しいです。
855:
18/08/08 23:41:36.55 35SEMuEM0.net
>>838
多桁長は結構手間、というか C/C++ でやるのは実は大変だと思います、キャリーフラグが使えない…
856:デフォルトの名無しさん
18/08/09 08:27:30.86 RmtKVlli0.net
素直にライブラリを使えば良いよ
加減乗算しか使わないから
速度を求めなければ自作するのも大した手間では無いけど
857:デフォルトの名無しさん
18/08/09 08:39:55.95 +YHL5mth0.net
>>839
勉強のためなのかな
もしそうならFreeBSDのコマンドのソースコードが良いと思う
短いものが多いからおすすめ
Linuxのものと比べると読みやすい
FreeBSDソースコードリポジトリ
URLリンク(svnweb.freebsd.org)
"bin"が名前に含まれるフォルダにコマンドのソースがある
858:デフォルトの名無しさん
18/08/09 10:23:18.39 vVjcL3xq0.net
GNUのツールチェインもいいんじゃないか
ストールマンのコードとか見れるよ
859:デフォルトの名無しさん
18/08/09 10:24:09.98 FWE3MOHN0.net
>>842
ありがとうございます。
> 勉強のため
その通りです。
プログラム言語自体がほぼ初めてなのですが
やはり教科書や仕様書ばかり見て 実際を見ないのでは身に付かない
と思いまして、OSSのソースコードであれば
コーディング規約が守られていたり
優秀なアルゴリズムが使われていたりするかなと予測して
OSSのソースコードリーディングをすることにしました。
ところが私が勉強の対象にしているのはISO/IEC 9899:1999(C99)であるのに対し、
ほとんどの有名なOSSはC89/90に準拠し、その古い制約に縛られていてC99の勉強の妨げになりそうでした。
というわけでC99に準拠した有名なOSSを探しているのです。
860:デフォルトの名無しさん
18/08/09 10:43:20.34 fhYwVVV8H.net
C89とC99の差を何も見ずにここに書けるなら別だが、
そうでなければ勉強の妨げにはならんから安心しろ
861:デフォルトの名無しさん
18/08/09 10:54:41.59 wz655HRh0.net
多倍長ならGMPがあるやん
862:デフォルトの名無しさん
18/08/09 12:48:19.15 9ZSWxBpXM.net
>>844
musl libc
863:
18/08/09 21:25:05.58 rS9AJYq60.net
>>838
>一般式
>多倍長
スレリンク(tech板:50番)
遅くて残念
864:デフォルトの名無しさん
18/08/09 22:23:11.20 MlnftC8O0.net
もうつくったんかはええw
順次加算とスピード同じくらい?
865:
18/08/09 22:27:53.84 rS9AJYq60.net
>>849
よくわかりません
多桁長計算に手間取りすぎていて、順次加算だろうが、一般式だろうが、差が出ないのです、私の多桁長計算は亀のように遅いのです…
866:デフォルトの名無しさん
18/08/09 23:30:35.12 8Br7DHMpd.net
コードを見てないけど
多倍長は乗算がキモ
オーダーn log nで計算する方法を考えよう
フーリエ変換を使うのが普通
867:デフォルトの名無しさん
18/08/09 23:45:29.15 8Br7DHMpd.net
最終的に10進数で表記するのが目的であれば
10進数のまま演算した方が良い
2進10進変換の方がフィボナッチより重い
>>829の方法を使う場合
多倍長ライブラリの乗算を使うより
フーリエ変換のライブラリを使う方が速い
それは式の関係上多倍長乗算を使うと
同じ事を複数回行うために無駄が多いから
同じく>>829の方法を使う場合
桁数の多い最後の方の計算ほど時間がかかる
最後の方の桁数の多い乗算を減らすのが高速化のにつながる
868:デフォルトの名無しさん
18/08/10 01:21:54.58 r84RRSaO0.net
>>847
ありがとうございます。
そもそもmuslを初めて聞きました(恥ずかしながら)
ちょうど,Linuxシステムも勉強したいと
869:思っていたので,これを読もうかなと思います。
870:デフォルトの名無しさん
18/08/10 21:12:30.49 Ao+gKXlH0.net
とりあえずこの前インストールした仮想環境のlinuxにgmplibをインストールした
相変わらず低学歴知恵遅れどもは頭悪いテキトーなことばっかりいってるわ
871:デフォルトの名無しさん
18/08/10 23:14:02.99 z8f8fUe70.net
俺なんかGoogleのAIライブラリのTensolFlowインストールしたぞ!
インストールしたぞ
872:デフォルトの名無しさん
18/08/10 23:55:30.59 Jbhl98S70.net
>>829の方針でフィボナッチ数を計算するコードを書いてみました
F(1億) が10.5秒
F(10億) が137.1秒
Cで450行くらいのコード
計算時間より秀丸エディタで結果を開く方が時間がかかってました
F(10) : time = 0.000013 / err = 0.000000
F(100) : time = 0.000017 / err = 0.000000
F(1000) : time = 0.000021 / err = 0.000000
F(10000) : time = 0.000111 / err = 0.000000
F(100000) : time = 0.001233 / err = 0.000001
F(1000000) : time = 0.019993 / err = 0.000004
F(10000000) : time = 0.251717 / err = 0.000019
F(100000000) : time = 10.507523 / err = 0.000076
F(1000000000) : time = 137.143945 / err = 0.000305
873:デフォルトの名無しさん
18/08/11 00:06:54.68 N9ICkOCi0.net
10000進数多倍長
超単純なFFT
演算は乗算と加算のみ
誤差の感じから100000進数でも大丈夫そうですね
計算式は基本以下を多倍長にしただけ
多少の無駄は除いてますが
----
uint64_t f(uint64_t n){
n++;
uint64_t a = 1;
uint64_t b = 0;
uint64_t t;
for (int i = 0 ; i < 64 ; i++){
t = b * b;
b = 2 * a * b + t;
a = a * a + t;
if (n & 0x8000000000000000){
t = b;
b = a + b;
a = t;
}
n += n;
}
return a;
}
874:デフォルトの名無しさん
18/08/11 00:16:27.47 N9ICkOCi0.net
コードをアップしようと思ったけど
ideoneだとうまく動かないみたい
875:デフォルトの名無しさん
18/08/11 10:03:32.46 ONHM6Q8h0.net
乙
じゃ、多倍長使って一般項の公式で算出したケースを晒します
スレチと知りつつ C++ で boost/multiprecision バックエンドは gmp
URLリンク(wandbox.org)
# fib(0) .. fib(1000) + fib(10億)
real 0m0.004s
user 0m0.004s
sys 0m0.000s
ま、そりゃ速いですわな……
科学的表記で出力すると速いけど 整数表記しようとするとfib(10億)で2分ぐらい
文字列化でかなり時間を食ってます
876:デフォルトの名無しさん
18/08/11 10:40:58.88 y6G1YdWMd.net
正確に全桁計算してその時間?
じゃないよね?
877:デフォルトの名無しさん
18/08/11 10:44:26.74 y6G1YdWMd.net
有効精度何桁で計算した場合の時間?
878:デフォルトの名無しさん
18/08/11 10:50:42.30 y6G1YdWMd.net
有効数字が少ない時は>>827の式の方が速いよ
879:
18/08/11 11:00:32.72 vW2Ha+vq0.net
>>827 は桁数が非常に大きくなるとどうなるか、よくわからないんですよ、ちょっと試してみますね
880:デフォルトの名無しさん
18/08/11 11:02:48.70 y6G1YdWMd.net
2個の定数は求めたい有効精度+αの精度で求めておけばOK
881:デフォルトの名無しさん
18/08/11 11:04:23.75 y6G1YdWMd.net
>>859の式の、
nに依存せずに計算できる所だけ先に計算しただけなので
882:デフォルトの名無しさん
18/08/11 11:11:54.17 y6G1YdWMd.net
expの計算の内部ではlog 2を使うし
2進10進変換にはlog_10 (2)を使うので
doubleより高精度で求めるなら
この辺も先に計算しておくことになるでしょう
>>856ははじめから10進での計算なので
10進文字列に変換するのは一瞬
883:デフォルトの名無しさん
18/08/11 11:13:07.14 y6G1YdWMd.net
書き忘れましたが
>>856は10進数で全桁正確に求めた場合の時間です
884:デフォルトの名無しさん
18/08/11 11:19:04.68 ONHM6Q8h0.net
>>861
>>859は仮数部のビット数を任意長に指定してあるから無限精度ですね
出力で桁落ちしてますが 正確に全桁計算してるはずです
885:デフォルトの名無しさん
18/08/11 11:22:04.43 y6G1YdWMd.net
>>86
886:8 どこで有効桁数を指定してます? 無理数の数値計算なので指定しないと低精度で計算しそうですが
887:デフォルトの名無しさん
18/08/11 11:25:21.63 y6G1YdWMd.net
f(10億)の下位100桁はいくつになります?
私は今出先で私の結果は夜貼ります
888:デフォルトの名無しさん
18/08/11 11:29:35.08 ONHM6Q8h0.net
>>869
URLリンク(www.boost.org)
gmp_floatが number<gmp_float<0>> の typedef なので
"variable precision by setting the template argument to zero"で無限精度指定になってると理解してます
正確に出力させると桁が膨大で検証しにくくてしょうがないな…… これ
889:デフォルトの名無しさん
18/08/11 11:39:50.69 17qcRus/0.net
とりあえずかわいそうなぐらい頭悪いヤツしかいないのは分かった
一旦、多倍長演算向けに3つの方法を評価する
ちなみにgmpの関数にフィボナッチの関数がついてる
きっとこの速度にすら届かないと考えられる(まだ動かしてない)
↓多倍長演算使ってない3つの方法の簡単なコードがコレ
URLリンク(ideone.com)
※ オマケでアホが書いたコード(>>857)も入ってる
※ オレの適切なありがたい注釈がついてる
1.ひたすら足し算
2.一般項
多倍長演算をするまえに適切な精度を設定しないといけない
どれぐらいの精度にすればいいかがまだ未解決 ※ とりあえず2回計算することでいけるような気がしないでもない
3.再帰階乗演算
URLリンク(www.ics.uci.edu)
探した中でコイツが一番いい感じがする
> This is a recursive algorithm, so as usual we get a recurrence relation defining time,
> just by writing down the time spent in a call to matpow (O(1)) plus the time in each recursive call
> (only one recursive call, with argument n/2). So the recurrence is
> time(n) = O(1) + time(n / 2)
890:デフォルトの名無しさん
18/08/11 11:48:25.12 y6G1YdWMd.net
>>870
手計算だと下位3桁は875
合ってます?
891:デフォルトの名無しさん
18/08/11 11:52:02.92 y6G1YdWMd.net
>>871
√5を無限精度で求めるなんて不可能ですよ
892:デフォルトの名無しさん
18/08/11 11:55:08.80 y6G1YdWMd.net
>>872
>>857はそこのリンクのAlgorithm 5の無駄を省いたものですよ
893:デフォルトの名無しさん
18/08/11 11:58:25.35 y6G1YdWMd.net
桁数は>>827で瞬時に出ますね
>>856もまず桁数を求めて必要なメモリを確保してから計算してます
894:デフォルトの名無しさん
18/08/11 12:00:16.70 17qcRus/0.net
↓アルゴリズム5でオレのサンプルではちゃんと動いてるからな
URLリンク(ideone.com)
↓オマエのは動かしても適切な結果にならない
URLリンク(ideone.com)
オマエのはお話にならないぐらいペケ
↓ペケの理由もちゃんとコメントに書いてある
URLリンク(ideone.com)
895:デフォルトの名無しさん
18/08/11 12:04:23.64 y6G1YdWMd.net
劣化コピーしたらそりゃ正しく動かないよ
nは64bitにしないと
896:デフォルトの名無しさん
18/08/11 12:06:06.40 ONHM6Q8h0.net
>>874
あー、そりゃそうですね…
>>873
968 ずれてますね
897:デフォルトの名無しさん
18/08/11 12:06:47.07 17qcRus/0.net
オマエは基本的にオツムに問題がある
病院へいったほうがいい
898:デフォルトの名無しさん
18/08/11 12:07:58.68 y6G1YdWMd.net
nが32bitなら0x80000000にしないと
多倍長で動かすためのテストコードだから
桁数が小さい時の計算回数は全く無視
ループが進んでからやっと演算がはじまる
899:デフォルトの名無しさん
18/08/11 12:09:49.79 17qcRus/0.net
64回しかループしてない
Σ n
n→64
はいくつになる
900:デフォルトの名無しさん
18/08/11 12:14:07.21 y6G1YdWMd.net
n <<= 1;
って書いてあげた方がよかったかな
どうせコンパイラが足し算に直すだろうし
901:デフォルトの名無しさん
18/08/11 16:36:24.18 17qcRus/0.net
1.と3.は簡単にできた
URLリンク(ideone.com)
gmplibのフィボナッチは n=10,000,000 を
0.7秒ぐらいで処理できる
オレが作ったのは4秒ぐらいかかる
m,10000000,4.008508,3.989280
g,10000000,0.724954,0.717120
全然かなわない
少しやってみて面倒そうだから後回しにしてた一般項やってみるか
902:デフォルトの名無しさん
18/08/11 18:32:01.22 y6G1YdWMd.net
>>859
同じライブラリを使って>>857のアルゴリズムで計算すると速いかもしれません
a, b, t だけ多倍長にすればいいです
903:デフォルトの名無しさん
18/08/11 18:34:26.69 y6G1YdWMd.net
ループの最後の64回目は
aだけを計算すればいいので
かなり省略出来ます
904:デフォルトの名無しさん
18/08/11 19:41:53.58 17qcRus/0.net
URLリンク(ideone.com)
精度評価用のログ取得処理
32bit版GMPの仮数部は初期値が64bitで32bitずつ増えていく模様
ちなみに64bit精度で一瞬で求まるフィボナッチ数のサイズ(bit)予測値はほぼ誤差なし
※ 9999件まで確認したが誤差は発生してない
※ 保険で、1dword(32bit - 最小単位) 分、余分に足しとけば、この予測値で間違いがおきることはまずないと考えられる
フィボナッチ数のサイズ(bit)予測値から必要な精度が予測できる
※ 9999件まで確認したが
※ フィボナッチ数のサイズ(bit)の1dword(32bit - 最小単位) 分より大きい誤差は発生してない
↓コレがその結果
URLリンク(fast-uploader.com)
URLリンク(fast-uploader.com)
数学的に証明したわけではないが、きっとコレで間違いなくいける
つまり予測値に64bit足しとけば間違いがおきることはない
905:デフォルトの名無しさん
18/08/11 19:44:24.09 17qcRus/0.net
で、>>887の結果に基づいて
一般項で処理するコードを書いた
URLリンク(ideone.com)
一般項で処理
やってみたが
一般項で処理なんかするとともかく遅い
6,942,482 bitsの一般項の計算で
お話にならないぐらいものすごい時間がかかる
calculation 6942482bits
f,10000000,35.082393,34.855636
g,10000000,0.722054,0.720584
つまり、結論としてフィボナッチ数を求めるなら
GMPに用意されてる関数を使うのが一番
再帰階乗演算使う方がはるかにマシ
一般項で求めるのはウンコ
906:
18/08/11 19:56:34.45 vW2Ha+vq0.net
>>888
gmp の生Cインターフェースを叩くとは、勇気がありますね
私は、C++ インターフェース gmp_class でやることはあっても gmp を C インターフェースで叩くことはありません
あれは、あとから見てなにがなんだかわからなくなってしまう…
a + b√5, a, b ∈Z で表される数は、それ同士を足しても掛けても、その結果はやはり a + b√5 の形になるのだから(そして結果は整数になることがわかっているのだったらなおさら)、
√5 を開かずにその係数を有理数の範囲で計算するようにすれば(>>813)、ずいぶんと違うと思います >>830, >>848
907:デフォルトの名無しさん
18/08/11 21:43:12.30 N9ICkOCi0.net
F(1千万)の計算時間
gmp_fib_uiは0.72秒
私のは0.25秒
私が適当に作ったヤツの方が勝っちゃいましたね
コードは以下
URLリンク(ideone.com)
908:
18/08/11 21:47:29.90 vW2Ha+vq0.net
>>890
>F(1000000000) = 0
となっていますが、ちゃんと動いているのでしょうか?
909:デフォルトの名無しさん
18/08/11 21:50:41.32 N9ICkOCi0.net
ローカル環境では動いてますが、
>>858に書いた通りideoneだと動きません
910:デフォルトの名無しさん
18/08/11 21:58:41.55 VKOHvb3S0.net
floatとdoubleの値の範囲を教えてください。
-0.000034 < float < 0.000034
-0.00000000016 < long < 0.0000000016
みたいな感じで教えてください><
911:デフォルトの名無しさん
18/08/11 22:22:37.58 v96Fcglg0.net
>>892
ライブラリがないとかならエラーになるし
そんなことって�
912:るん? 何が原因だ
913:
18/08/11 22:25:26.31 vW2Ha+vq0.net
>>892
私も手元で確かめました、確かにこれは爆速ですね…私の古いPCでもf(1000万)までならば一瞬で答えが出ます。
914:デフォルトの名無しさん
18/08/11 22:26:14.75 UyVMPuF50.net
C言語でゲームがアクションゲームが作りたくてプログラミングはじめた
実際にプログラミングって楽しいと感じてる
でも入門書通りソートアルゴリズムを勉強してて、基本交換法やら基本選択法は楽にフローチャートもコードも書けたのに、そのあとにやった クイックソートとか単純挿入法では面白いぐらい苦戦した(どっちももうできるようになったけど)
これって、俺のアルゴリズムを考える能力が乏しいってことなのかな
それともはじめはみんなこんなもの?
915:デフォルトの名無しさん
18/08/11 22:26:40.35 UyVMPuF50.net
×ゲームがアクションが
◯アクションゲームが
916:デフォルトの名無しさん
18/08/11 22:35:15.61 d91dd04/0.net
再帰とポインタで躓くと昔から伝わっている
特に再帰は禅でもやって悟りを得ないと理解できない
917:さまよえる蟻人間
18/08/11 22:35:57.56 /IS35TFAd.net
だれでも最初は赤ちゃん歩き。私も最初はじゃんけんのプログラミングが全くできなかった。
918:デフォルトの名無しさん
18/08/11 22:42:41.92 N9ICkOCi0.net
>>890のバグを修正しました
URLリンク(ideone.com)
F(1千万)のideoneでの計算時間は0.31s
919:デフォルトの名無しさん
18/08/11 23:13:57.75 N9ICkOCi0.net
n log nより遅いように見えるのは
サイズが大きいとキャッシュから外れるため
フーリエ変換はメモリのランダムアクセスが頻発するので
キャッシュに入るかどうかで大きく時間が変わる
適当に並び変えながら変換することで
キャッシュヒット率を上げたり
メインメモリに収まりきらない巨大サイズをHDDを使いながら変換することも出来るのだが、
今回はシンプルさ重視の為見送り
世の中にある高速FFTライブラリに差し替えれば
もっと高速化する
920:デフォルトの名無しさん
18/08/11 23:25:51.63 N9ICkOCi0.net
>>893
環境依存
float, double がそれぞれIEEE754のbinary32とbinary64準拠の場合はおおよそ
-3.4028234663852885981*10^38 ≦ float ≦ 3.4028234663852885981*10^38
-1.7976931348623157081*10^308 ≦ double ≦ 1.7976931348623157081*10^308
正確には以下の範囲
float : ±(2^24-1)*2^104
double : ±(2^53-1)*2^971
これに追加して±∞, NaN などがある
組み込みなどではdoubleも32bitであることも多い
921:デフォルトの名無しさん
18/08/11 23:33:36.42 N9ICkOCi0.net
C言語スレだから ^ は排他的論理和の意味で使うべきでしたかね
-340282346638528859811704183484516925440 ≦ binary32 ≦ 340282346638528859811704183484516925440
-1797693134862315708145274237317043567980705675258449965989174768
0315726078002853876058955863276687817154045895351438246423432132
6889464182768467546703537516986049910576551282076245490090389328
9440758685084551339423045832369032229481658085593321233482747978
26204144723168738177180919299881250404026184124858368
≦ binary64 ≦
1797693134862315708145274237317043567980705675258449965989174768
0315726078002853876058955863276687817154045895351438246423432132
6889464182768467546703537516986049910576551282076245490090389328
9440758685084551339423045832369032229481658085593321233482747978
26204144723168738177180919299881250404026184124858368
922:デフォルトの名無しさん
18/08/11 23:41:42.36 N9ICkOCi0.net
>>894
単純なバグでした
size_t が64bit前提の部分があったのと、
非常に恥ずかしいですが以下のような動作不定なコードがありました
a->data[i++
923:] = b->data[i] + carry; 私のローカル環境だとたまたま動いていたようです intが16bitだとまだヤバそうですが、 16bit環境で動かすことはないと思うので気にしないことにします
924:デフォルトの名無しさん
18/08/11 23:47:51.76 VKOHvb3S0.net
>>902
ありがとうございました
例えば、986.0033っていう数字は
floatではないのでしょうか?
925:デフォルトの名無しさん
18/08/11 23:56:09.61 N9ICkOCi0.net
>>905
986.0033 はdoubleのリテラル
986.0033f はfloatのリテラル
926:デフォルトの名無しさん
18/08/12 00:23:34.17 BxiB5wa+0.net
>>904
ideoneだと100万ちょっと下でRuntimeErrorで途中でとまってるぽいね
927:デフォルトの名無しさん
18/08/12 07:44:42.21 P7wTPSJQa.net
蛇とJSとアセンブラ少しかじったんだけどCの効率的な勉強法ある?
主に蛇のチューニングと、これから勉強する予定なんだけど組み込み用マイコンのプログラムを書くために使う
小型のドローンもどきにのせたマイコンに、学習済みパターンをのせて動作制御したい
928:デフォルトの名無しさん
18/08/12 07:46:52.98 3JJNsMDc0.net
蛇?
929:デフォルトの名無しさん
18/08/12 07:47:28.70 P7wTPSJQa.net
ぱいそん
930:デフォルトの名無しさん
18/08/12 07:52:36.70 3JJNsMDc0.net
アセンブラをかじったのならCの習得は速そう
組み込みマイコンはどんなやつ?
931:デフォルトの名無しさん
18/08/12 07:57:10.98 P7wTPSJQa.net
聞いといて申し訳ないんだけど全然知らないんだよね門外漢で
シンプリンク?とか言うやつでいいかなと思ってるけど、種類により出来ること出来ないことも分からない
932:デフォルトの名無しさん
18/08/12 08:08:39.25 3JJNsMDc0.net
文法をざっくり本とかで覚えたらあとは実践
高速化なら具体例を提示すれば私がアドバイスしますよ
高速化する場合はクリティカルポイントを絞ってから
時間がかからない所は高速化せずにそのままにしておくこと
アルゴリズムや式など、
上位の改良の方が高速化に寄与しやすいので
まずは上の方から考えること
下を高速化することで上が見にくくなって上の改良を妨げるようじゃ本末転倒なので
933:デフォルトの名無しさん
18/08/12 08:10:55.02 3JJNsMDc0.net
>>907
出力データが大きすぎて途中で切られたのかと思ったけど
エラーになってます?
934:デフォルトの名無しさん
18/08/12 08:15:31.91 P7wTPSJQa.net
>>913
なるほど
心にとどめておきます
C入門でおすすめの本とかサイトとかある?
JSには教科書探しに大分苦労させられたので
935:デフォルトの名無しさん
18/08/12 08:25:40.14 El938M/O0.net
アルゴリズムなど分からないですが、プログラムが出来るようになりますか?
936:デフォルトの名無しさん
18/08/12 08:40:26.57 2Xoj+DoI0.net
>>915
ISBN 4-320-02692-6
937:デフォルトの名無しさん
18/08/12 09:27:40.23 eabwfPDR0.net
>>915
苦しんで覚えるC言語
URLリンク(9cguide.appspot.com)
書籍版:ISBN 978-4798030142
>>917の本は古い記法だったはずだから初学者向けではないと思う
938:デフォルトの名無しさん
18/08/12 09:36:27.44 2Xoj+DoI0.net
古い記法ってこれか?
main(argc, argv)
char **argv;
{
int i 0;
while (i < argc) printf("%s ", argv[i =+ 1]);
return (0);
}
939:デフォルトの名無しさん
18/08/12 10:04:57.52 sdNRpf8zM.net
>>917
K&Rって言えよ。余計わかりにくい。
>>915
K&Rは「既にプログラミングできる人がCの文法を覚える用」だから、本当に最小セットしか乗ってない。
ただ、それでいい人=上級者からは絶賛されてる。彼らにとってはいわゆる入門書は冗長すぎるから。
十分にPythonと『アセンブラ』を使え、文法だけ知ればいけるの�
940:ネら、K&Rはすごくいい。 PythonやJS等の上級言語しか使ったことなく、ポインタって何?なら、 殆どの人はポインタで躓くので、K&Rだけではかなり厳しいと思う。 アセンブラのインデックスレジスタがポインタそのものなのだが、ピンと来るか? ピンと来るなら、まずK&R買って、だめなら入門書でいいと思う。 意味不明だと思うのなら、最初から入門書を買え。
941:デフォルトの名無しさん
18/08/12 10:22:27.82 sFpP4hR50.net
>>920
> 文法だけ知ればいけるのなら、K&Rはすごくいい。
アホなの?
942:デフォルトの名無しさん
18/08/12 10:28:59.49 P7wTPSJQa.net
ありがとう
とりあえず苦Cは確定で、メインとしてK&R 使えるか本屋で見てくる
正直上級者どころか初心者を脱したかどうかレベルだから合わないかもだが
数学でチューリングマシンがーって机上の勉強やってたからかアセンブラはすんなりいった
行けそうだったらK&R使ってみる
てことで本屋行ってくる
943:デフォルトの名無しさん
18/08/12 11:20:48.05 1gNSypiFd.net
チューリングマシンは数学板の巨大数スレッドで
よく話題にあがるので
ご教授しに来ていただけるとうれしいです
944:デフォルトの名無しさん
18/08/12 11:36:54.26 zEU3SQsmM.net
>>922
> 数学でチューリングマシンがーって机上の勉強やってたからかアセンブラはすんなりいった
これって理論畑から行くとチューリングマシンがプログラミングより先に来るんか?
正直、それが何の役に立つのかはよく分からんが…
945:デフォルトの名無しさん
18/08/12 11:45:51.35 1gNSypiFd.net
コンピューター言語で記述出来る事の限界がわかる
実際のコーディング技術はあまり関係ないと思う
946:デフォルトの名無しさん
18/08/12 11:48:28.53 1gNSypiFd.net
全ての命令に、次に実行する命令のアドレスを指定出来るようなCPUがあるが
これはちょっと近いか
947:デフォルトの名無しさん
18/08/12 12:31:18.04 zEU3SQsmM.net
>>925
それって自然言語に対してって事?
なら逆にチューリングマシンの範囲を超える事象って何?
単純に言えば、それは未来永劫今の構造のCPUでは無理ってことになるはずだが、
そんな分野があるのか?