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では無理ってことになるはずだが、
そんな分野があるのか?
948:デフォルトの名無しさん
18/08/12 14:06:00.94 1gNSypiFd.net
>>927
ある
949:デフォルトの名無しさん
18/08/12 14:09:23.49 1gNSypiFd.net
プログラムの停止判定とか
乱数生成とか
非常に増加量の大きな関数とか
950:デフォルトの名無しさん
18/08/12 14:17:10.15 BCWcLjTed.net
P≠NP問題をご存知ない?
951:デフォルトの名無しさん
18/08/14 09:46:10.53 KzkkOfFYd.net
>>889
a, bを漸化式の形にして
それを行列表記にすると
|0.5 2.5|^n
|0.5 0.5|
これを基底変換して最適化すると
結局>>829 >>857になりました
まあ当たり前と言えば当たり前なんですが
952:デフォルトの名無しさん
18/08/15 06:16:23.73 fPb+tE65d.net
Java屋なんですけど自己啓発のために学生時代以来のCを夏休みに勉強しようと思ってます
開発環境のオススメを教えてください
自分が思いつくところでは…
・Vimとgcc
・VScode
・eclipse
こんな所ですが皆さんどうされてますか?
MacもWindowsも両方手元にはあります
953:デフォルトの名無しさん
18/08/15 08:44:48.25 NFQKBcxz0.net
開発環境なんて何でもいいから
さっさと勉強しなさい
954:デフォルトの名無しさん
18/08/15 09:12:26.87 o8lgioa70.net
>>932
組み込みとかで特定のコンパイラ使うとかならVSCodeでいいと思うが、そうでないなら普通にVisual Studioでいいと思う
955:デフォルトの名無しさん
18/08/15 11:22:04.73 mhFNubNm0.net
IDEが無い時代の開発を体験してみるという修行をしたいのならテキストエディタとコマンドラインだけでやる
これは啓発効果が高い
956:デフォルトの名無しさん
18/08/15 12:03:22.86 YVF6Ac/t0.net
俺は未だにターミナルとエディター
これ以上の快適さを知らないし知るつもりもない
957:デフォルトの名無しさん
18/08/15 12:10:42.58 o8lgioa70.net
別にいいんじゃね?
ターミナル最高だからお前らも使え!
とか言わなきゃ
958:デフォルトの名無しさん
18/08/15 12:11:49.41 PVw+eqmQd.net
EDLIN最高
959:デフォルトの名無しさん
18/08/15 12:43:52.85 1lipv2et0.net
Vimと言いたいところだが最近はもっぱらVSCodeばかり
960:デフォルトの名無しさん
18/08/15 14:46:36.23 bAZUebux0.net
俺は超初心者時代をTurbo Cで、
中級以後はviとccでおぼえた
ただし常に他の環境も色々使ってみてた
961:デフォルトの名無しさん
18/08/15 14:58:02.44 1MwRKcc7d.net
VisualStudioで良いとか口が裂けても言えねぇよ
MSVCはこのご時世ですらpure CはC89だぞ?
初心者で知らないならともかくこういうスレでVSをCの環境として勧める奴何者だよ
962:デフォルトの名無しさん
18/08/15 15:30:10.79 NhDv8JXAa.net
gccもclangもインテルコンパイラーもc99さえ100%準拠してないだろ
何でmsvcだけ槍玉あげてんの?
963:デフォルトの名無しさん
18/08/15 15:44:09.01 PVw+eqmQd.net
C89/90から覚えれば良い
あとはおまけ
Cが使われるのなんて今時組み込みくらいだ
組み込み用コンパイラだといまだC89/90が多い
964:デフォルトの名無しさん
18/08/15 15:45:48.23 PVw+eqmQd.net
いろんなコンパイラ、いろんな環境を使って見るのも良い
8bit、RAM64バイトみたいなチープな環境とか
965:デフォルトの名無しさん
18/08/15 15:46:05.90 cYF20yina.net
いや、組込開発環境なんてgccばっかりだからC99が標準だよ。
まあ妙に保守的なひとがいて古い文法を強制するんだけど…
966:デフォルトの名無しさん
18/08/15 15:48:33.27 PVw+eqmQd.net
組み込みに標準なんて無い
各社いろいろだ
967:デフォルトの名無しさん
18/08/15 15:59:23.74 BN2igdfy0.net
そういやLinuxとかのCUIでTurboCみたいな環境ってあるのかな?
あると外部からsshでログインしている時に使えて良いのだが。
968:デフォルトの名無しさん
18/08/15 16:22:31.09 fRV95OwVa.net
>>946
年寄りぶったガキが「古い環境でもコンパイル可能なコード」にこだわってるせいでどんどんコードが汚くなるのよ。
>>947
emacsじゃだめってことなんだろうねえ。
webベースのIDEでいろいろあるんだろうけど、決定版があったら知りたいわ
969:デフォルトの名無しさん
18/08/15 16:28:18.26 PVw+eqmQd.net
>>948
細かい表記とかよりももっと大きな事を気にした方がいいぞ
970:デフォルトの名無しさん
18/08/15 17:03:06.47 BN2igdfy0.net
>>948
emacsねえ。あれは複雑過ぎて今更覚える気になれない。
まああれが多機能過ぎるせいで他が伸びなかったって感じはするなあ。
971:デフォルトの名無しさん
18/08/15 17:04:43.75 hzdQdpXra.net
>>949
大きいことって、15年前の環境でコンパイルできることだろ?
972:デフォルトの名無しさん
18/08/15 17:13:57.27 2ovpzQjs0.net
vimでエディットして :make でビルド、
エラーや警告は quickfix 機能でシラミ潰し。
強く薦める気はないし、他の人に使い方を教えるほどの技量はないけど、
個人的にはこの組み合わせが便利だわ。
errorformat オプションを設定すれば、どんなコンパイラや変換ツールでも
ソースファイルのエラー箇所を呼び出してくれるからね。
973:デフォルトの名無しさん
18/08/15 17:24:36.77 /SQznhgr0.net
C99じゃないと困ることなんてそんなにないしな。わざわざC++と互換性ないコード書くメリットもない。
974:デフォルトの名無しさん
18/08/15 17:36:19.98 tGPywhyN0.net
C89だとforの初期化のときに新しく変数を宣言できないじゃん
975:デフォルトの名無しさん
18/08/15 17:48:50.30 bAZUebux0.net
コンパイラは案件による、それだけ
C99を使う案件でC89がどうたらぬかすのはただのアホ
逆もまたしかり
976:デフォルトの名無しさん
18/08/15 17:52:57.43 cYF20yina.net
C++とCだとファイル分けるでしょ?
977:デフォルトの名無しさん
18/08/15 17:56:50.28 /SQznhgr0.net
そういう意味じゃたしかに、C99規格に入れられたいくつかの機能は便利だ。
なので訂正する↓
msvcがC99準拠じゃないからといって困ることなんてそんなにないしな。
978:デフォルトの名無しさん
18/08/15 17:58:30.01 /kIK810yM.net
自己啓発の勉強ならC89で困ることとかなんかあるんだろうか?
979:デフォルトの名無しさん
18/08/15 17:59:04.25 2ovpzQjs0.net
//コメントと、どこでも変数宣言、がダメってのは辛いのよね。
エラーを直すのは簡単だけど、いかにもバカバカしい作業で。
980:デフォルトの名無しさん
18/08/15 18:00:49.89 PyNbth/v0.net
他人に教えるなら標準は尊重しよう
981:デフォルトの名無しさん
18/08/15 19:26:07.57 kg5weZ+NM.net
VSでC++環境使ってC文法だけで組めばよくね?
それ以前に環境なんてどれでもいい、とは思うが。
JavaでEclipseに慣れてるのならそれもありだと思うよ。
環境で躓くこと自体が無駄だよ。
そもそもJava分かっててCの練習なら、ポインタと変数の寿命管理だけだろ。
GUIでなければ、寿命管理は全部入れ子の構造化プログラミング徹底で済んでしまうし、今時CでGUIもない。
結果的にポインタだけなのだから、環境なんて何でもいいと思うが。
その上で、現場で古い文法を使う必要があるのなら、その時に慣れればいいだけで。
環境なんて全くどれでもいいだろ、これなら。
emacs毛嫌いしている奴がいるのもよく分からんが。
Ctrl+Fとか覚えたくなければ、カーソルキー使えばいいだけだろ。
emacs使いでも、よほどコアな奴でない限り、EmacsLispなんて書いてないぞ。俺も書けんし。
982:デフォルトの名無しさん
18/08/15 19:29:59.75 BN2igdfy0.net
viのキーバインドになってないと体が覚えるまで面倒
983:デフォルトの名無しさん
18/08/15 19:42:07.19 kg5weZ+NM.net
キーバインド自体は対応させるELが有ってもおかしく無いと思うけど。
(emacs教団の入会基準があのキーバインドに慣れることでも無かろう)
むしろ編集モード/閲覧モードを持つviの方がエディタとしては異端だ。
他の通常エディタに慣れたらviは無理だと思うが。
とはいえ、どっちも使えるって奴も聞かないので、
vi派なら今更emacsに慣れる必要は無いと思うが。
同様に、JavaでEclipseに慣れてるのなら、VSに慣れる必要もないし、そのままやった方がいいと思うよ。
何も知らなくて環境の立ち上げすら面倒なら、
VSならインストールさえすればクリックでビルド&デバッグ実行まで出来るから楽ってだけで。
984:デフォルトの名無しさん
18/08/15 20:00:10.97 PVw+eqmQd.net
いろいろ使いたければC++を使えば良いんだよ
new delete 例外 stl を使わなくてもCより便利だろ
C++じゃなくてわざわざCを覚えたいって言うからには
何か理由があるんだろう
985:デフォルトの名無しさん
18/08/15 20:08:35.17 kg5weZ+NM.net
ちなみに、CとC++を明確に区別してるのって、C使いとC++使いだけだろ。
他はだいたいC/C++扱いだし、926もそうだと思うが。
986:デフォルトの名無しさん
18/08/15 20:21:36.71 53ohHsaIa.net
まあでかいプログラムはC++で書いてれば良かったと思うようになるよ。
でもC++で書かれたクソコードというのはCのそれの比ではないので、品質のコントロールは問題になる。
987:デフォルトの名無しさん
18/08/15 20:22:57.45 /SQznhgr0.net
C99はC++の拡張を取り入れるんならC++98と互換性が取れるところで一旦〆れば
よかったものを、なんで要らん独自性を出したかねぇ。
988:デフォルトの名無しさん
18/08/15 20:24:28.79 PVw+eqmQd.net
勉強段階なら一緒に覚えれば良いよ
自然といろんな流儀を覚える
989:デフォルトの名無しさん
18/08/15 20:27:16.78 kg5weZ+NM.net
>>966
> でもC++で書かれたクソコードというのはCのそれの比ではない
うむ、それは言えてる。
文法が簡易すぎてC++的意味不明な回りくどい糞コードを書けないからなのか、
それともこの簡易文法だけで戦っていける奴らは本質的に鍛えられるからなのか。
990:デフォルトの名無しさん
18/08/15 20:28:43.25 2ovpzQjs0.net
わざわざ「C言語なら俺に聞け」スレッドで質問してるからには
C++ではないCに限定してるんじゃないか、と判断するのも合理的ではあるわね。
CとC++の両方を扱う初心者向けスレッドも別に存在するし。
もちろん >>932 の意図は投稿者自身のものだけど。
991:デフォルトの名無しさん
18/08/15 20:28:52.37 PVw+eqmQd.net
C++の糞コードと言えばこれ
#define private public
992:デフォルトの名無しさん
18/08/15 20:28:53.66 kg5weZ+NM.net
>>967
それってC側からC++と分かれたってこと?(俺は経緯はよく知らない)
てっきりC++が独自路線突き進んだと思っていたが。
993:デフォルトの名無しさん
18/08/15 20:30:15.51 PVw+eqmQd.net
もう別の言語だよ
もちろん共通部分だけでも組めるけど
994:デフォルトの名無しさん
18/08/15 20:38:11.04 PVw+eqmQd.net
そういえば
コメントを // から /* */ にわざわざ変える人がいる
今まで何人か見た
そんな暇があったらさっさとコードを組め
995:デフォルトの名無しさん
18/08/15 20:39:14.27 kg5weZ+NM.net
>>971
それ、単純に通るか?
なおVC++/CLIではそこで手こずったことがある。
当初ほぼprivateで作っていたクラスを継承する必要が出てきて、
protectedとpublic等に変更したらコンパイラにさんざん文句言われて手こずった。
あれでC++の糞さを再認識した。本質的でないところで凄く引っかかる。
(VC++/CLIは意図的に文法を厳しくしているからというのもあるが)
996:デフォルトの名無しさん
18/08/15 20:44:46.95 PVw+eqmQd.net
単純に通るか通らないかは環境や作りに依存する
わざわざ糞コードを披露するところが律儀だね
997:デフォルトの名無しさん
18/08/15 20:53:59.37 kg5weZ+NM.net
あー、俺のコードが糞だったからってか?
しかし、当初継承無しで単独で使う予定だったクラスに対し、仕様変更で機能追加されたんだから致し方ないと思うが。
ただ、個人的にはpublic/private自体が不要、とは思っている。
JavaScriptはpublicしかなくて、当初「これでいいのか?」と思ったが、やってみたら全く問題ない。
外から使うときに中身なんて気にしたくないから、そもそもprivateなんて触りに行かない。
逆に、外から触りたい物をprivateにすることも間違っているし。
あれはいちいち書かなくとも自然と分かれ、それで全く問題ない。
(文法的にチェックするだけの意味しかない。まあそれを言えば型システム自体もそれに近いが)
998:デフォルトの名無しさん
18/08/15 21:00:35.67 PVw+eqmQd.net
じゃあclassを使わないで
全てstructで書けば良いよ
public protected privateは一切不要だから
999:デフォルトの名無しさん
18/08/15 21:06:02.60 YVF6Ac/t0.net
VSCodeのVimプラグイン使いづらいんだよな
SublimeTextのVimプラグインみたいに両方のエディタのいいとこ取りみたいなキーバインディングだったらいいのに
1000:デフォルトの名無しさん
18/08/15 21:08:10.50 YVF6Ac/t0.net
リロードしてなかったら既にエディタの話題が終わってて浦島みたいな気分だ
ハゲが
1001:さまよえる蟻人間
18/08/15 21:18:55.80 XbGFS7Sjd.net
はーげん脱
1002:デフォルトの名無しさん
18/08/15 22:46:38.48 UO318XzAM.net
>>978
確かに俺はそれでいいが、
それだと「出来る限りprivateにすべき」教の信者から迫害を受けるのがウザイ。
これはC++よりもJavaの方が酷いように思うが。
この辺の文法的宗教戦争がCにまるでないのはメリットかも、とは思うよ。
private/publicに関してはデメリットの方が多い気がする。
なお、型もだ。動的型ならC++のテンプレートの大半は書かなくて済む。
無駄に手間を増やしている。動的型の方が書くのは快適だ。
あとはtypoを完全に検出れば、といったところか。
とはいえ、�
1003:ャ度を追求するC/C++の世界には馴染まないが。
1004:デフォルトの名無しさん
18/08/15 23:04:52.90 BN2igdfy0.net
Kotlinもよろしく
1005:デフォルトの名無しさん
18/08/15 23:05:44.66 B3Li9vMqa.net
まあ実装とインターフェースを区別する心掛けが大切なのであって、privateにして満足したらあかんとは思うよ。
1006:デフォルトの名無しさん
18/08/15 23:54:13.35 1IcV1KLeM.net
>>984
というよりJavaは「粗結合教」「イテレータ教」かな?
見せなくて済むなら見せるなでインタフェースを無理に細くしているのと、
抽象化する必要がない場合もとりあえずイテレータにしてるだろ。
C++もナマポ撲滅の為に無駄にイテレータを導入しているから、この点は似ているが。
Cはここら辺の宗教戦争がない代わりに、どうしても抽象レベルが上がりにくく、
低レベルコードをひたすら書く羽目になるのが欠点か。
1007:デフォルトの名無しさん
18/08/16 01:31:46.14 IiF9TGTT0.net
どの言語でも、基本は疎結合。
スパゲッティ・泥団子などの密結合は、皆大嫌い!
こっちをいじれば、あっちが変わり、
あっちをいじれば、こっちが変わりw
1008:デフォルトの名無しさん
18/08/16 01:50:41.92 HU9VHWiC0.net
クラスはないがモジュール分割くらいは普通にするだろう
1009:デフォルトの名無しさん
18/08/16 03:27:52.80 zyXyJDDmd.net
>>979
激しく同意
1010:デフォルトの名無しさん
18/08/16 07:14:50.63 yO9+GMaw0.net
イテレータがナマポ撲滅のため??
1011:デフォルトの名無しさん
18/08/16 07:39:41.31 IWf/QMdza.net
ここの人たちはリーナスさんのC++批判はどう思ってる?
1012:デフォルトの名無しさん
18/08/16 07:39:43.44 t6OwQxX10.net
相手するなよ…
1013:デフォルトの名無しさん
18/08/16 09:33:11.42 yO9+GMaw0.net
俺もC++には気に入らんところがいくつかあって
リーナスの意見とは一致するところが多い
まず筆頭のクソが例外
次いでnewのコレジャナイ感
classとstructのしょーもなすぎる違い
1014:デフォルトの名無しさん
18/08/16 13:12:37.52 KNhd5GXjd.net
>>992
C♯さんディスってるんですか?
1015:デフォルトの名無しさん
18/08/16 17:25:51.84 w2NRgS+k0.net
goにしよう
1016:デフォルトの名無しさん
18/08/16 17:56:37.44 sGlIzl1XH.net
goto
1017:デフォルトの名無しさん
18/08/16 18:29:44.72 GnkF98h40.net
gotogo2
1018:さまよえる蟻人間
18/08/16 18:34:35.64 x8SR5C2Sd.net
次スレ
1019:デフォルトの名無しさん
18/08/16 22:32:33.50 +7r3fHyOM.net
>>990
俺はかなり賛同。言いたいことは分かる。
ただ、Cはクラスとラムダを導入すべき、それからリテラルをもっと充実させて、複合代入も欲しい。
これらがあれば、ずいぶん楽に書けるようになるはず。
>>989
イテレータの必然性なんてほぼ無いだろ。
様々なコンテナに対応する必要があれば、列挙を抽象化する必要があるが、まずこれがほぼ無い。
次に、インタフェースを揃えたいだけなら、酷い話「forで回せる」でも揃ってしまう。
そしてクラス内のコンテナを外部から直接イテレートする必要もほぼ無い。(publicにイテレータを見せる必要がない)
イテレータが必要なのって、汎用コンテナを作るときくらいだろ。
イテレータは抽象化の分かりやすい例だから取り上げられているだけで、実用性は皆無だと思うぜ。
それよりforEachとかの方が100倍使える。
Matz「俺はxxx[i]なんていちいち書きたくないんだよ」の方が分かる。
抽象化もコストがかかるから、必要ない抽象化はやるべきではない。
同様に、疎結合化もコストがかかるから、必要ない疎結合化はやるべきではない。
Cの場合は一応、ファイル内は密結合、ファイル間は疎結合というコンセプトだろ。
(実際それが適用されているかはともかく)
まあこれで合ってると思うぜ。
同様にクラス言語もクラス内は密結合、クラス間は疎結合のはずだが、
Javaの場合はクラス内も疎結合にしようとして細切れにする�
1020:フが基本だろ。 そういう文化もありだとは思うが。 (FizBuzzのJava実装でイテレータ導入して悪ノリしてたのがあったろ。あれ) 疎結合の方がいいのは事実なのだけど、結果的にコード量が増える。 それで読む手間が増えるようなら意味無いだろ。 自分が読んで一番楽なところでバランスすればいいのだけど、それは俺はC程度かと思う。 ただこれは俺がC出身だからであって、Java出身ならあの細切れ状態が合うのかもしれないが。 (Javaは、テンプレートがない分、多態の選択肢が狭くて、結果的にあの文化なのだとは思う)
1021:
18/08/16 22:41:01.15 G1RQbz/X0.net
>>998
>(FizBuzzのJava実装でイテレータ導入して悪ノリしてたのがあったろ。あれ)
これ、見てみたいです…
1022:デフォルトの名無しさん
18/08/16 23:37:52.43 fOCSKLtw0.net
C言語なら俺に聞け 147
スレリンク(tech板)
1023:デフォルトの名無しさん
18/08/17 02:02:24.00 itWjjCCsd.net
>>1000
乙なんだな
1024:デフォルトの名無しさん
18/08/17 04:54:29.33 xjFqJl5K0.net
>>1000
乙野郎!
1025:デフォルトの名無しさん
18/08/17 07:30:57.69 TtX4VAeH0.net
>>998
ちょっと何言ってるかわからん
983はナマポと何の関係があるのかと聞いているんだが??
1026:デフォルトの名無しさん
18/08/17 08:18:10.48 VdqNpuZ90.net
うめ
1027:デフォルトの名無しさん
18/08/17 08:18:29.95 VdqNpuZ90.net
うめ
1028:デフォルトの名無しさん
18/08/17 08:18:59.69 VdqNpuZ90.net
1000
1029:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 109日 3時間 31分 22秒
1030:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています