C言語なら俺に聞け 146
■ このスレッドは過去ログ倉庫に格納されています
>>699のコードにエラー時の処理を入れるのに
いちいち>>642にするのか?
使い分け
gotoの使いどころでは使う 多重ループを抜けるのに
半角君はどう書くつもりたろうか
switch / case からループを抜ける
これも良くあるコード ループの中を関数化したうえで case 句からは return で即脱出するのかな
勝手な想像だけど ここ喧嘩ばっかだから他所行くかーと思ってC++スレ行ったらそこでも喧嘩しててワロタ 一緒にすんな失礼な
発 者 同 . 。_ ____ 争
生 同 .じ . /´ (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./` }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / ∨ ` ̄
/ ..:.:./ 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.: }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄> というかだ
randとquickselectどっからコピペしてきたのか正直にいいなさい
非の打ちどころなく最適化されたロジック
筋のいい関数分割
的確な規約にのっとった命名
正確な英語
おまえがつくったのbakaとallocとfree_dataだけだろ
関数ごとにあまりにも作成者の知性差がありすぎる 質問者そっちのけで
議論だけは続きます
いつものパターン https://ideone.com/H6J9g6
コレで上位3件と
コレで上位3%の比較ができる
ちなみにアホのコードが混じってるせいでWebでは動かない
https://en.wikipedia.org/wiki/Quickselect
ちなみにコードはコレみながらちゃんとオレが作ったからな
あとな quickselect は見直してたら一箇所コードに誤りがあったわ
動作自体に大きな影響はない
それがなんでかは、それでどう動作がかわわるか、それがどういう修正なのかは
きっとこのスレの知恵遅れたちには分からない
疑似乱数生成器は普通にxorshiftコピって作ったわ
あれならインターネッツにいるようなどんなバカが書いても同じ結果になるからな
その部分だけはあってるわ
で、あとは、テスト評価用関数の名前がどうこうしかないワケか
まあオツムの程度がよくしれるわ 1個も自分で考えたアルゴリズムが無いっていう
選択も正しくない ハンカク君「100件から上位3件のソートじゃダメだ!
100万件から上位3万件を抽出(未ソート)できるクイックセレクトがエレガント!」
全角君「1億件をソートするにはそれじゃダメだろ ヴォケが!
『マルチコアの並列ソート』こそがグレイシャス!」
二 倍 角 君 「 ダ ァ ホ が ! 1 0 0 億 じ ゃ !
量 子 C P U で 超 並 列 じ ゃ ー い ! !」
今後の展開を想像したらわくわくしてきた
にしても 今日もあっついなぁ…… なんかしょうもない争いしてんのな
どんぐりの背比べ 病気の発作みたいなもの
しばらく放置して、本人が落ち着くのを待つ
かまえばかまうほど、病気は進行する またCPUが熱くなったわ
今回はvmwareで動作してるLinuxで動作させた
↓処理結果
http://fast-uploader.com/file/7088994902722/
上位3件
https://i.imgur.com/cBCyXmq.png
上位3%
https://i.imgur.com/SxxNkoj.png
もうねオレのコードがエレガントすぎて困るわ
キミラとはレベルが違うワケ レベルが
キミラとはステージが違うワケ ステージが
分かった? あとな、知恵遅れが自分で新しいアルゴリズムを考えるとか
1億年たってもムリだからな
オレレベルの人間ぐらいにならないとムリ
このスレにいるような知恵遅れを遥かに凌駕する先人が
考えたアルゴリズムすら使いこなせてない
はっきりいってな低学歴知恵遅れやクソニートは
自己評価が高すぎるワケ
低学歴知恵遅れやクソニートは自分のカスっぷりの自覚がない
まずココが問題なワケ
そんな知恵遅れが新しいアルゴリズムとかな逆立ちしてもムリだからな
知恵遅れや凡人はまず適切なアルゴリズムを選択できるようになるのが先だからな 日本ではPGは低学歴底辺しかならない職業だからな
しょうがないという側面もなある
おのずと低学歴底辺の頭悪いのばっかりになる まちがいがあったんだろうか?
相手が間違ってるかもしれないのに知ったげして いつもいってることだが
レスしてるヤツが低学歴か
レスしてるヤツがニートかなんかな
レスみればすぐに分かることだからな
残念なことにそれをいくら隠そうとしても
隠すことはできない
本人はバレてないつもりかもしれないが
チョンバレなワケ お前の書き込みが病的だからお前が特定されてるだけだろ
ほかのやつの学歴なんか一切わからんわw #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になるか教えてほしい 4
2, 3
0, 1, 1, 2
0, 1, 1, 0, 1 >>776
足し算の合計としてじゃなく2つのfuncとして返されるってこと?
そしてその連続ってこと? >>775
フィボナッチだってことは解ってる?
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0
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 >>778
え、概念はわかった
func(0) = 0
func(1) = 1 ってどこからわかるんだ?
returnではないよね? >>780
え、リターンって 定型文というか終わりを意味するだけだと思ってた。 #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;
}
このスレの知恵遅れがどうこういうだけムダ
コレ動かして自分で考えればバカでもチョンでも分かる >>781
return は関数を抜けて 呼び出し元に戻り値を返すんだよ >>781
なぜ、そんなものが存在するのか
つまり、必要なのか
ただブレースを閉じるだけではダメなのか
疑問を持ったことはないのか? https://ideone.com/lYgehQ
コレでfuncが再帰による深さ優先探索が行われてる様子も分かるハズ
ココまで分かるならこの部分の課題は終わりのハズだ ヒープソートの参照のみならオーダー(計算量)はどうなるか。
先着順
当てたらアマギフ 俺も何度かここで質問してるが、ム板にしては答えちゃんと返してくれるスレなんだよ。
ただただ質問者と回答者以外の第三者の介入が必ず発生して荒れ出すだけで・・・w >>785
なんでindent() のforの++iってなんか意味あるの? 2ch慣れというか5ch慣れしてスルーカパワーが高まった人でないと中々難しいのかも知れんのう 一番上と内部でレベルが合ってるように見えてて実はズレてる気持ち悪さ
中に入れるか呼び出し場所で外に書くかどっちかにしる あとひどいのがprintしてる"return"の後ろの文字列の示すところが変わってること
固定値返してるところでfunc(n) -> n みたいにさらに下位を呼び出してるみたいにとれる書き方がしてあって
return func(2-2) + func(2-1) -> 1 とか計算内容を書いてるところと一貫性がとれてない でも計算内容を展開してるだけだからいいっちゃいいのか
うーん 全然ずれてない
コールスタックの深さとぴったり一致してる
オツムが足りない知恵遅れのために
さらにムダな補助出力をつけてやったぞ(AとB)
https://ideone.com/2vP2kN
ここまでくると
メクラやツンボを誘導するのに近い。。。
↓この課題は、最終的には、コレにおちつくことになる
(なんでかは、nを増やせばきっと知恵遅れでも分かるとは思ってたからな)
https://ideone.com/eaJEjX
補助出力がないとなにやってるのかすら分からないメクラやツンボでは
コレがなにやってるかもきっと理解できないわ
u_l、u_r、u_yしかないからな
知恵遅れは再帰が理解できてないのが、よおく分かったわ 余計紛らわしくなっとるわ!同じレベルで連続でリターンすんなしw
関数の戻りと呼び出し先の戻りがごちゃごちゃに 誤差www
そりゃアホが作れば誤差が問題になるだろうねえwww >>802
√5 の係数を整数で持てばいいのでは?
F_n = (φ^n - (-φ)^(-n)) / √5, φ=(1 + √5)/2 IEEEの倍精度(64bit)で15〜16桁程度の精度
つまりdouble、>>809の精度が概ねその程度
64bit整数なら19桁はいける ルートとn乗求める処理オーダーってどんなんじゃろ
64bitまでならルート使ったほうが早いだろうけど
結局桁数が大きくなったらルートとってn乗してって結構処理重そう
じつは全部足し算したほうが早かったりして nが大きい場合の計算オーダー
足し算の繰り返しの場合 : n^2
一般項を普通に計算した場合 : n (log n)^2 足し算の繰り返し:O(n)
一般項:O(1)
じゃないの? 加算、乗算、expなどの計算がO(1)で出来る範囲ならそうだね フィボナッチの私の回答
nが比較的小さな数までである場合、テーブルを持つのが最速であることは間違いない
じゃあテーブルを持たない場合、
固定有効精度であれば、以下で求めるのが計算量のオーダーが1
(int)(exp(.4812118250596034475*n-.8047189562170501873)+0.5)
floatやdoubleではなく、4倍精度や100倍精度であってもオーダーは1
上の2個の定数は事前に計算しておけばいいし、
毎回計算してもnとは無関係
nが非常に小さい数でなければ単純に加算するよりは上記の方が速いでしょう
floatやdoubleであれば1行で済みます じゃあ多倍長演算を用いて任意のnに対して正確に求める場合を考える
以下は基礎知識
n番目のフィボナッチ数の桁数はnに比例する
乗算の計算オーダーは、桁数をnとすると n log(n)
ルートの計算オーダーは n log(n)
n乗は、オーダーlog(n)回の乗算で求まる
以上より、一般項の式の通りまじめに計算しても
オーダー n (log n)^2 で計算できる 工夫すると、計算オーダーを n log n にすることが出来る
行列の形でフィボナッチ数列の漸化式を記述すると
|0 1|^n |0|
|1 1| . . |1|
でn番目とn+1番目のフィボナッチ数が求まることがわかる
この式を用いれば
計算オーダー n log n で正確に n 番目のフィボナッチ数を求めることができる >>810,812,814
漸化式 f(n+2)=f(n+1)+f(n) から一般のf(n) を求めるオーダーはΟ(n)
一般式 >>807 から求めるオーダーはΟ(log n)
だと思う
https://mevius.5ch.net/test/read.cgi/tech/1434079972/49
c を定数として、c^n を求めるにはΟ(log n) でいける 元は>>775の初心者の質問で
計算オーダーとか全く関係なかったんだけど
半角君があまりに無知な癖に自信過剰なので
つい書いてしまった >>824
それは固定有効精度の場合
固定有効精度であればオーダーは1で計算出来る
>>821参照 固定精度であれば
四則演算もexpも丸めも全て
値によらず固定時間で計算出来る てことで、
半角君に3勝ですね
コーディング
アルゴリズム
数学
全て勝ってしまった
まあ学歴も勝ってると思うので4勝か >>829
>>826 の指摘のとおり、固定有効精度だったら >>829 になるようです
>>821 は、ちょっと理解が及びません… 頭悪いバカが半角に勝ったつもりでいる
半角はこのスレでは間違いなく天才
他のやつらがお話にならないぐらい頭悪いからな
典型的な頭悪いやつが半角に勝とうと必死になってる ここまで一般式も行列もコードなし多倍長も
まだはじまってもいない ISO C99に準拠して、なおかつある程度開発が盛んなOSSを教えてください。
ソースコードが綺麗なことで有名ならなお嬉しいです。 >>832
多桁長は結構手間、というか C/C++ でやるのは実は大変だと思います、キャリーフラグが使えない… 素直にライブラリを使えば良いよ
加減乗算しか使わないから
速度を求めなければ自作するのも大した手間では無いけど >>833
勉強のためなのかな
もしそうならFreeBSDのコマンドのソースコードが良いと思う
短いものが多いからおすすめ
Linuxのものと比べると読みやすい
FreeBSDソースコードリポジトリ
https://svnweb.freebsd.org/base/release/11.2.0/
"bin"が名前に含まれるフォルダにコマンドのソースがある GNUのツールチェインもいいんじゃないか
ストールマンのコードとか見れるよ >>836
ありがとうございます。
> 勉強のため
その通りです。
プログラム言語自体がほぼ初めてなのですが
やはり教科書や仕様書ばかり見て 実際を見ないのでは身に付かない
と思いまして、OSSのソースコードであれば
コーディング規約が守られていたり
優秀なアルゴリズムが使われていたりするかなと予測して
OSSのソースコードリーディングをすることにしました。
ところが私が勉強の対象にしているのはISO/IEC 9899:1999(C99)であるのに対し、
ほとんどの有名なOSSはC89/90に準拠し、その古い制約に縛られていてC99の勉強の妨げになりそうでした。
というわけでC99に準拠した有名なOSSを探しているのです。 C89とC99の差を何も見ずにここに書けるなら別だが、
そうでなければ勉強の妨げにはならんから安心しろ もうつくったんかはええw
順次加算とスピード同じくらい? >>843
よくわかりません
多桁長計算に手間取りすぎていて、順次加算だろうが、一般式だろうが、差が出ないのです、私の多桁長計算は亀のように遅いのです… コードを見てないけど
多倍長は乗算がキモ
オーダーn log nで計算する方法を考えよう
フーリエ変換を使うのが普通 最終的に10進数で表記するのが目的であれば
10進数のまま演算した方が良い
2進10進変換の方がフィボナッチより重い
>>823の方法を使う場合
多倍長ライブラリの乗算を使うより
フーリエ変換のライブラリを使う方が速い
それは式の関係上多倍長乗算を使うと
同じ事を複数回行うために無駄が多いから
同じく>>823の方法を使う場合
桁数の多い最後の方の計算ほど時間がかかる
最後の方の桁数の多い乗算を減らすのが高速化のにつながる >>841
ありがとうございます。
そもそもmuslを初めて聞きました(恥ずかしながら)
ちょうど,Linuxシステムも勉強したいと思っていたので,これを読もうかなと思います。 とりあえずこの前インストールした仮想環境のlinuxにgmplibをインストールした
相変わらず低学歴知恵遅れどもは頭悪いテキトーなことばっかりいってるわ 俺なんかGoogleのAIライブラリのTensolFlowインストールしたぞ!
インストールしたぞ >>823の方針でフィボナッチ数を計算するコードを書いてみました
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 ■ このスレッドは過去ログ倉庫に格納されています