X



C言語なら俺に聞け 146
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 839f-AnMQ)
垢版 |
2018/04/30(月) 04:47:37.50ID:XX4FB8lc0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


C言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
-
※前スレ
C言語なら俺に聞け 145
http://mevius.5ch.net/test/read.cgi/tech/1519046038/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0754デフォルトの名無しさん (ワッチョイ cf01-Xflc)
垢版 |
2018/08/05(日) 08:57:44.72ID:RKME5Hq50
一緒にすんな失礼な

   発 者 同         . 。_   ____           争
 生 同 .じ     .    /´   (ゝ___)          い
 .し 士 .レ      .__/'r-┴<ゝi,,ノ   ro、      は、
 .な で .ベ      ∠ゝ (ゝ.//`   ./`  }⌒j     
 .い し .ル        } ⌒ /`ヽ、_∠l,ノ ・ヽ´
 .! ! か の       /  ´..:.} >、、___,  .r、 ソ、`\
             /   ..:.:.}   /   ∨ ` ̄
            /   ..:.:./       丶
           / _、 ..:.:.:.{    .{.:.:.   \
          {   ..:Y  .ゝ、   {.:.:.:.:.    ヽ
          、  ..:/ 丿 .:〉   >.- ⌒  .  ヽ
          / {. ..:./ ソ ..:./  .(    ..:.:.:`  ..:}
         ./..:.:}.:.:./ ヘ、 ..:./   .\ ..:.:r_,ノ、.:.:}
        ./..:.:/.:/   {.:./     X.:.:}.}   X X
        /..:.:/ .}.:    }:/       .Y丶ヽ  Y.:Y
  . __/.:/ { }  《.〈、     _,,__>.:》丶   Y.:\
  /.:.:.:.:.::/   !.:.:ゝ  ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ   \.: ̄>
0755デフォルトの名無しさん (ワッチョイ cf81-Xflc)
垢版 |
2018/08/05(日) 10:50:56.85ID:cQ22SoWZ0
というかだ
randとquickselectどっからコピペしてきたのか正直にいいなさい

非の打ちどころなく最適化されたロジック
筋のいい関数分割
的確な規約にのっとった命名
正確な英語

おまえがつくったのbakaとallocとfree_dataだけだろ
関数ごとにあまりにも作成者の知性差がありすぎる
0761デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/05(日) 11:25:39.76ID:BwCU11k30
https://ideone.com/H6J9g6
コレで上位3件と
コレで上位3%の比較ができる

ちなみにアホのコードが混じってるせいでWebでは動かない


https://en.wikipedia.org/wiki/Quickselect
ちなみにコードはコレみながらちゃんとオレが作ったからな

あとな quickselect は見直してたら一箇所コードに誤りがあったわ

動作自体に大きな影響はない
それがなんでかは、それでどう動作がかわわるか、それがどういう修正なのかは
きっとこのスレの知恵遅れたちには分からない

疑似乱数生成器は普通にxorshiftコピって作ったわ
あれならインターネッツにいるようなどんなバカが書いても同じ結果になるからな
その部分だけはあってるわ

で、あとは、テスト評価用関数の名前がどうこうしかないワケか
まあオツムの程度がよくしれるわ
0763デフォルトの名無しさん (ワッチョイ 332d-1sSI)
垢版 |
2018/08/05(日) 11:54:12.46ID:aSQnOhv+0
ハンカク君「100件から上位3件のソートじゃダメだ!
    100万件から上位3万件を抽出(未ソート)できるクイックセレクトがエレガント!」

全角君「1億件をソートするにはそれじゃダメだろ ヴォケが!
    『マルチコアの並列ソート』こそがグレイシャス!」

二 倍 角 君 「 ダ ァ ホ が !  1 0 0 億 じ ゃ !
          量 子 C P U で 超 並 列 じ ゃ ー い ! !」

今後の展開を想像したらわくわくしてきた
にしても 今日もあっついなぁ……
0767デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/05(日) 12:25:21.31ID:BwCU11k30
またCPUが熱くなったわ
今回はvmwareで動作してるLinuxで動作させた

↓処理結果
http://fast-uploader.com/file/7088994902722/

 上位3件
 https://i.imgur.com/cBCyXmq.png
 上位3%
 https://i.imgur.com/SxxNkoj.png

もうねオレのコードがエレガントすぎて困るわ
キミラとはレベルが違うワケ レベルが
キミラとはステージが違うワケ ステージが

分かった?
0769デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/05(日) 12:35:47.77ID:BwCU11k30
あとな、知恵遅れが自分で新しいアルゴリズムを考えるとか
1億年たってもムリだからな

オレレベルの人間ぐらいにならないとムリ

このスレにいるような知恵遅れを遥かに凌駕する先人が
考えたアルゴリズムすら使いこなせてない

はっきりいってな低学歴知恵遅れやクソニートは
自己評価が高すぎるワケ
低学歴知恵遅れやクソニートは自分のカスっぷりの自覚がない
まずココが問題なワケ

そんな知恵遅れが新しいアルゴリズムとかな逆立ちしてもムリだからな
知恵遅れや凡人はまず適切なアルゴリズムを選択できるようになるのが先だからな
0770デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/05(日) 12:37:41.32ID:BwCU11k30
日本ではPGは低学歴底辺しかならない職業だからな
しょうがないという側面もなある

おのずと低学歴底辺の頭悪いのばっかりになる
0773デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/05(日) 13:07:24.80ID:BwCU11k30
いつもいってることだが
レスしてるヤツが低学歴か
レスしてるヤツがニートかなんかな
レスみればすぐに分かることだからな

残念なことにそれをいくら隠そうとしても
隠すことはできない

本人はバレてないつもりかもしれないが
チョンバレなワケ
0775デフォルトの名無しさん (ワッチョイ cf9c-6Ev3)
垢版 |
2018/08/05(日) 13:22:37.54ID:yCkv1Zf90
#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になるか教えてほしい
0777デフォルトの名無しさん (ワッチョイ cf9c-6Ev3)
垢版 |
2018/08/05(日) 13:29:48.92ID:yCkv1Zf90
>>776
足し算の合計としてじゃなく2つのfuncとして返されるってこと?
そしてその連続ってこと?
0779デフォルトの名無しさん (ワッチョイ cf9c-6Ev3)
垢版 |
2018/08/05(日) 13:41:13.29ID:yCkv1Zf90
>>778
え、概念はわかった
func(0) = 0
func(1) = 1 ってどこからわかるんだ?
returnではないよね?
0781デフォルトの名無しさん (ワッチョイ cf9c-6Ev3)
垢版 |
2018/08/05(日) 13:45:55.07ID:yCkv1Zf90
>>780
え、リターンって 定型文というか終わりを意味するだけだと思ってた。
0782デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/05(日) 13:52:07.99ID:BwCU11k30
#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;
}

このスレの知恵遅れがどうこういうだけムダ
コレ動かして自分で考えればバカでもチョンでも分かる
0785デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/05(日) 14:56:39.59ID:BwCU11k30
https://ideone.com/lYgehQ

コレでfuncが再帰による深さ優先探索が行われてる様子も分かるハズ
ココまで分かるならこの部分の課題は終わりのハズだ
0786デフォルトの名無しさん (ラクッペ MM47-YMl7)
垢版 |
2018/08/05(日) 16:39:28.00ID:HLNQqKaSM
ヒープソートの参照のみならオーダー(計算量)はどうなるか。
先着順
当てたらアマギフ
0789デフォルトの名無しさん (ワッチョイ a340-Xflc)
垢版 |
2018/08/06(月) 17:48:10.34ID:ODvV2Pda0
俺も何度かここで質問してるが、ム板にしては答えちゃんと返してくれるスレなんだよ。
ただただ質問者と回答者以外の第三者の介入が必ず発生して荒れ出すだけで・・・w
0791デフォルトの名無しさん (アウアウカー Sa07-iFcb)
垢版 |
2018/08/06(月) 20:12:03.76ID:PKEcOyRea
2ch慣れというか5ch慣れしてスルーカパワーが高まった人でないと中々難しいのかも知れんのう
0793デフォルトの名無しさん (ワッチョイ cf81-Xflc)
垢版 |
2018/08/06(月) 23:08:00.95ID:d11E19u/0
あとひどいのがprintしてる"return"の後ろの文字列の示すところが変わってること
固定値返してるところでfunc(n) -> n みたいにさらに下位を呼び出してるみたいにとれる書き方がしてあって
return func(2-2) + func(2-1) -> 1 とか計算内容を書いてるところと一貫性がとれてない
0795デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/06(月) 23:39:21.68ID:9v3Lf9b90
全然ずれてない
コールスタックの深さとぴったり一致してる

オツムが足りない知恵遅れのために
さらにムダな補助出力をつけてやったぞ(AとB)

 https://ideone.com/2vP2kN

ここまでくると
メクラやツンボを誘導するのに近い。。。

 ↓この課題は、最終的には、コレにおちつくことになる
  (なんでかは、nを増やせばきっと知恵遅れでも分かるとは思ってたからな)
 https://ideone.com/eaJEjX

補助出力がないとなにやってるのかすら分からないメクラやツンボでは
コレがなにやってるかもきっと理解できないわ
u_l、u_r、u_yしかないからな

知恵遅れは再帰が理解できてないのが、よおく分かったわ
0797デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/07(火) 00:04:14.76ID:5k05bDr80
https://ideone.com/2vP2kN

知恵遅れ対応はコレが限界
0801デフォルトの名無しさん (アウアウカー Sa07-iFcb)
垢版 |
2018/08/07(火) 12:37:07.91ID:r/NXRNz/a
記憶から消滅
0805デフォルトの名無しさん (アウアウカー Sa07-iFcb)
垢版 |
2018/08/07(火) 17:18:17.21ID:r/NXRNz/a
あれ?今日は半角にしないんだ。
0809デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/07(火) 22:59:36.12ID:5k05bDr80
https://ideone.com/jzecIF

やはり
整数を足すにかぎるわ
0810デフォルトの名無しさん (ワッチョイ cf80-gYkF)
垢版 |
2018/08/07(火) 23:08:45.73ID:5k05bDr80
IEEEの倍精度(64bit)で15〜16桁程度の精度
つまりdouble、>>809の精度が概ねその程度

64bit整数なら19桁はいける
0812デフォルトの名無しさん (ワッチョイ 4381-Xflc)
垢版 |
2018/08/07(火) 23:47:20.78ID:oCoNsgzD0
ルートとn乗求める処理オーダーってどんなんじゃろ

64bitまでならルート使ったほうが早いだろうけど
結局桁数が大きくなったらルートとってn乗してって結構処理重そう

じつは全部足し算したほうが早かったりして
0821デフォルトの名無しさん (ワッチョイ 6350-Xflc)
垢版 |
2018/08/08(水) 18:58:28.93ID:UEEWq45u0
フィボナッチの私の回答

nが比較的小さな数までである場合、テーブルを持つのが最速であることは間違いない

じゃあテーブルを持たない場合、

固定有効精度であれば、以下で求めるのが計算量のオーダーが1
(int)(exp(.4812118250596034475*n-.8047189562170501873)+0.5)

floatやdoubleではなく、4倍精度や100倍精度であってもオーダーは1
上の2個の定数は事前に計算しておけばいいし、
毎回計算してもnとは無関係
nが非常に小さい数でなければ単純に加算するよりは上記の方が速いでしょう
floatやdoubleであれば1行で済みます
0822デフォルトの名無しさん (ワッチョイ 6350-Xflc)
垢版 |
2018/08/08(水) 19:03:59.97ID:UEEWq45u0
じゃあ多倍長演算を用いて任意のnに対して正確に求める場合を考える

以下は基礎知識
n番目のフィボナッチ数の桁数はnに比例する
乗算の計算オーダーは、桁数をnとすると n log(n)
ルートの計算オーダーは n log(n)
n乗は、オーダーlog(n)回の乗算で求まる

以上より、一般項の式の通りまじめに計算しても
オーダー n (log n)^2 で計算できる
0823デフォルトの名無しさん (ワッチョイ 6350-Xflc)
垢版 |
2018/08/08(水) 19:10:00.90ID:UEEWq45u0
工夫すると、計算オーダーを n log n にすることが出来る

行列の形でフィボナッチ数列の漸化式を記述すると
|0 1|^n |0|
|1 1| . . |1|
でn番目とn+1番目のフィボナッチ数が求まることがわかる

この式を用いれば
計算オーダー n log n で正確に n 番目のフィボナッチ数を求めることができる
0831デフォルトの名無しさん (ガラプー KK87-/9RV)
垢版 |
2018/08/08(水) 21:38:16.32ID:Iprz26WCK
頭悪いバカが半角に勝ったつもりでいる
半角はこのスレでは間違いなく天才
他のやつらがお話にならないぐらい頭悪いからな
典型的な頭悪いやつが半角に勝とうと必死になってる
0838デフォルトの名無しさん (ワッチョイ 0364-WYJg)
垢版 |
2018/08/09(木) 10:24:09.98ID:FWE3MOHN0
>>836
ありがとうございます。
> 勉強のため
その通りです。
プログラム言語自体がほぼ初めてなのですが
やはり教科書や仕様書ばかり見て 実際を見ないのでは身に付かない
と思いまして、OSSのソースコードであれば
コーディング規約が守られていたり
優秀なアルゴリズムが使われていたりするかなと予測して
OSSのソースコードリーディングをすることにしました。
ところが私が勉強の対象にしているのはISO/IEC 9899:1999(C99)であるのに対し、
ほとんどの有名なOSSはC89/90に準拠し、その古い制約に縛られていてC99の勉強の妨げになりそうでした。
というわけでC99に準拠した有名なOSSを探しているのです。
0844 ◆QZaw55cn4c (ワッチョイ ea60-Qb5F)
垢版 |
2018/08/09(木) 22:27:53.84ID:rS9AJYq60
>>843
よくわかりません
多桁長計算に手間取りすぎていて、順次加算だろうが、一般式だろうが、差が出ないのです、私の多桁長計算は亀のように遅いのです…
0846デフォルトの名無しさん (スップ Sd8a-+oCX)
垢版 |
2018/08/09(木) 23:45:29.15ID:8Br7DHMpd
最終的に10進数で表記するのが目的であれば
10進数のまま演算した方が良い
2進10進変換の方がフィボナッチより重い

>>823の方法を使う場合
多倍長ライブラリの乗算を使うより
フーリエ変換のライブラリを使う方が速い
それは式の関係上多倍長乗算を使うと
同じ事を複数回行うために無駄が多いから

同じく>>823の方法を使う場合
桁数の多い最後の方の計算ほど時間がかかる
最後の方の桁数の多い乗算を減らすのが高速化のにつながる
0848デフォルトの名無しさん (ワッチョイ de80-oNxq)
垢版 |
2018/08/10(金) 21:12:30.49ID:Ao+gKXlH0
とりあえずこの前インストールした仮想環境のlinuxにgmplibをインストールした
相変わらず低学歴知恵遅れどもは頭悪いテキトーなことばっかりいってるわ
0850デフォルトの名無しさん (ワッチョイ 0b50-2km2)
垢版 |
2018/08/10(金) 23:55:30.59ID:Jbhl98S70
>>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
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況