1 名前:デフォルトの名無しさん [2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr.net] 何にも知らない0からの出発、超初心者のためのC++相談室
174 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 13:38:19.99 ID:Mso39Itu.net] 使用改め仕様
175 名前:デフォルトの名無しさん [2020/10/20(火) 14:39:40.58 ID:C+6cO9mm.net] 多少違うのは #pragma くらいだろ 勝手に仕様なんて変えない 統合環境とか API とかはもちろん関係無い話
176 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 20:36:08.28 ID:3YoHPXFg.net] IDEはVisual Studio VC++はMSのC++商品名 C++/CLIとかを混同してね? これはC++を独自拡張したものだよ
177 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 22:21:46.71 ID:qSDH25Or.net] __declspec(dllimport)とかアホみたいに書かされたあの時代のmsvc拡張c++のことでしょ
178 名前:デフォルトの名無しさん [2020/10/21(水) 11:12:14.17 ID:xBgAWF1Y.net] 描かずに済むけどな
179 名前:デフォルトの名無しさん [2020/10/21(水) 13:51:50.76 ID:WStrtR1y.net] C++/CLIは拡張ですか? いくつかの流儀を置き換えていますよね? ポインタをハンドルと読んだり?
180 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 14:12:49.21 ID:xLl2qqDk.net] MS拡張にしろC++/CLIにしろ既存のコードの挙動を変えるようなことはしてないんでは? 拡張でいいんじゃね
181 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 18:58:32.20 ID:VaRlK94m.net] ポインタはポインタとしか言わんよ ハンドルは
182 名前:デフォルトの名無しさん [2020/11/24(火) 23:02:59.67 ID:uO0ONWsd.net] Visual Studio 2019をインストールしました Windowsスタートボタン→Visual Studio 2019を起動しました プロジェクト名を入れて下さい→test001 保存フォルダの場所を決めて下さい→Y:\_source\repos 何かのウインドウが開きました(おそらく開発の統合画面?) さっそく1行目から入力しようとしましたが、キー入力を受け付けてくれません 左の縦に、ツールボックスと表示しています このままでは進まないので、エクスプローラーでreposフォルダの下に samp01.txtを新しく作りました 何かのウインドウに戻り、samp01.txtを開くと文字入力が可能になりました 進め方が間違っているように思えますが、samp01.txtに#define...から 描き始めてよいでしょうか? 統合環境が苦手で、フォルダにテキストファイルを作りテキストエディタで ソースを書いて保存 コマンドラインでコンパイル、エラーがなければリンク...をしてきました 何かの画面には難しそうなソリューションエクスプローラー、その下には プロパティウインドウが表示されています。 このウインドウにも慣れないといけないので進め方を教えてください
183 名前:デフォルトの名無しさん mailto:sage [2020/11/25(水) 07:42:29.85 ID:+VuDDc3z.net] >>182 とりあえずこれに従えばおk https://docs.microsoft.com/ja-jp/cpp/build/vscpp-step-1-create?view=msvc-160
184 名前:デフォルトの名無しさん mailto:sage [2020/11/25(水) 08:12:43.79 ID:1cagBqIs.net] >>182 俺は、テキストエディタでソースを書いて、c規格で拡張子cppで保存して、 Visual Studioで、 コード無しで続行→ ファイル→開く→フォルダ で、コンパイルしてますがね。
185 名前:デフォルトの名無しさん mailto:sage [2020/11/27(金) 09:48:07.00 ID:sDMv6Edh.net] >>182 ソリューションを作るときに大雑把にどんなもの作るって指定すれば 最低限のファイルができて編集可能な状態になるんじゃないの?
186 名前:デフォルトの名無しさん mailto:sage [2020/11/27(金) 15:09:19.88 ID:8PW9KReU.net] ソリューションエクスプローラーのヘッダーファイル、ソースファイルのとこを右クリックで新規選べばまっさらなファイル作れるし メニューのファイル→追加?(うろ覚え)でも作れる
187 名前:デフォルトの名無しさん [2020/12/06(日) 23:34:56.54 ID:TL07p8cG.net] 手順書のページのURLありがとうございます。 Microsoft Visual Studio Community 2019 Version 16.8.2を使用中。 テキストで#include<stdio.h>から入力しましたが煮詰まりました。ソースはネットを検索してコピペなので、 コロンやセミコロンの間違いはないと思われます。 #include<stdio.h> int main( void ) { printf( "ようこそC(++)言語の世界へ\n" ); return 0; } タスクバー?にファイル(F)編集(E)表示(V)Git(G)プロジェクト(P)デバッグ(D)テスト(S)・・・があります。 手順書では[プロジェクトをビルドするには、 [ビルド] メニューの [ソリューションのビルド] を選択します。]とあります。 が、ビルドメニューがありません。 プルダウンのデバッグ(D)からデバッグ無しで開始したいですが デバッグ無しで開始が薄い文字になっており、クリックできません。 統合開発環境って皆さんが使用して使いやすいはずですよね。 何から順番にクリックしていくのかさっぱりわかりません。 手順通りにしようとして「ここをクリック」のところはたいていその「ここ」の項目が画面になくて ソースを書いてコンパイルすらできない、ありません。ありません状態。 同じバージョンでもメニューの項目が違っていたら次に何をするかお手上げです。 お助け下さい。
188 名前:蟻人間 mailto:sage [2020/12/06(日) 23:49:56.18 ID:x83Xfz/W.net] >>187 ソリューションを作成した? ソリューションにソースを追加した?
189 名前:デフォルトの名無しさん [2020/12/07(月) 00:14:40.22 ID:MnyC2DM9.net] アドバイスありがとうございます。 ソリューションエクスプローラー フォルダービューを右側に開いています そこにhello_.cppが表示されています。いま、開いているファイルです。 #includeからreturnまでペーストしています。 ソリューションエクスプローラーでhello_.cppを右クリックしますと[追加]があります。 [追加]->新しいファイル 新しい項目の追加(W) 新しいフォルダー この3つを表示します。ソリューションエクスプローラーにhello_.cppが表示されているだけでは不足でしょうか hello_.cppを右クリック新しいファイルを選ぶと名前を入力になりました aaaと入力するとツールボックスに新しくテキスト入力タブが表示 #includeからreturnまで貼り付けました デバッグ無しで開始の文字は薄いままです ビルドメニューはありません 編集や表示、Git、プロジェクトのメニューを色々クリックしています 変わりません… 何か、こんな不自由な統合開発環境を使うのは苦痛しか感じず、しかし 全世界のプログラマの人たちも使っているものですし、なんとか ビルドメニューを出したいです
190 名前:デフォルトの名無しさん [2020/12/07(月) 00:18:03.60 ID:MnyC2DM9.net] あちこちクリックしていますと、画面の上に プロジェクト、ビルド、デバッグの文字が出てきました ビルド->ソリューションでコード分析を実行を選びます デバッグ->デバッグ無しで開始は薄い文字でクリックできません 何か手順が不足しているようです
191 名前:蟻人間 mailto:sage [2020/12/07(月) 00:18:08.82 ID:LcHpzYm6.net] ファイルとフォルダの違い ソリューションの種類が違う だろうな
192 名前:デフォルトの名無しさん [2020/12/07(月) 00:59:54.04 ID:MnyC2DM9.net] 不慣れでごめんなさい デバッグ無しで開始は薄い文字でクリックできず変わらず 本日はそろそろ寝ます 後は明日、使い方と用語を調べます
193 名前:蟻人間 mailto:sage [2020/12/07(月) 01:04:11.74 ID:LcHpzYm6.net] 初心者は素直にチュートリアルの手順に従ってればいいんだよ。
194 名前:デフォルトの名無しさん [2020/12/09(水) 03:22:01.70 ID:WuZTb4kZ.net] 濡れちゃうう!
195 名前:デフォルトの名無しさん [2020/12/12(土) 02:59:14.21 ID:a7AUwK+L.net] なにからすればいいの 目標がない
196 名前:デフォルトの名無しさん mailto:sage [2020/12/12(土) 13:02:07.54 ID:A7m2fOl0.net] 「何かしたい」というものが無いならば、しなくてどうぞ。 「何かしたい」というものが有る人は、自分で行動する。
197 名前:はちみつ餃子 mailto:sage [2020/12/12(土) 13:39:37.52 ID:UUApGKPR.net] 質問サイトにある質問に (根拠になる一次資料 (主に仕様書の具体的な項目) と共に) 回答するのを繰り返せば 特定のプログラミング言語に詳しくなることは出来るよ。 それでプログラミングを出来るようになるかどうかはわからんけど。
198 名前:デフォルトの名無しさん mailto:sage [2020/12/12(土) 13:47:09.92 ID:k8hTa554.net] 「人工知能搭載の人型アンドロイドが作りたい」 という目標を持つ者が 「printfで文字列を表示したい」 という目標を持つのはとてもつらい
199 名前:デフォルトの名無しさん [2020/12/12(土) 18:31:18.09 ID:KTyXxWQ0.net] 今日は国会図書館に行ってきたわ。
200 名前:デフォルトの名無しさん [2020/12/12(土) 18:34:21.54 ID:KTyXxWQ0.net] 国会図書館は国会議事堂内に分室があって資料を取り寄せて閲覧できるんですよ。 でも、ほとんど利用実績が無いらしいんですね。
201 名前:デフォルトの名無しさん [2020/12/12(土) 19:52:44.57 ID:KTyXxWQ0.net] 国会図書館は若い女性と、男性は老人が多かったです。 土曜日だからかもしれません。 資料のコピーは長蛇の列が出来ていました。 あの列で感染するんでしょうね。 女性のメガネ率は8割超えてました。 おそらくドクター持ちでしょうね。
202 名前:デフォルトの名無しさん [2021/01/05(火) 14:54:55.04 ID:zOsm6XDhK] 自由な働き方を求め10代〜20代の登録が拡大。フリーランス登録者約3.4倍に増加。 https://prtimes.jp/main/html/rd/p/000000348.000010591.html フリーランス向け報酬即日払いサービス『先払い』申込件数5,000件突破 https://prtimes.jp/main/html/rd/p/000000048.000047439.html ITフリーランスの独立支援サービス『テックビズ』&定額制全国住み放題『ADDress』提携開始 https://prtimes.jp/main/html/rd/p/000000035.000047639.html リース、フリーランスのためのお部屋探しアプリ「smeta」の正式版をリリース、提携賃貸管理戸数が6万戸を突破 https://prtimes.jp/main/html/rd/p/000000032.000042693.html 家族50万円・単身30万円を支給、新潟県が「テレワーク・フリーランス移住」で応援金 https://www.bcnretail.com/market/detail/20201225_205952.html ワーケーション会社員増加中、定額制宿泊サービス「HafH」を実体験 https://finance.yahoo.co.jp/news/detail/20201231-00257105-diamond-column 「フリーランススタート」の掲載案件数、累計16万件を突破 https://codezine.jp/article/detail/13393 フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、 掲載案件数1ヶ月で10,000件増加し、累計掲載案件数16万件突破!さらにリモートワークの掲載案件数5,000件突破! https://prtimes.jp/main/html/rd/p/000000012.000038976.html フリーランス向けの求人は「テレワーク可能」が主流に 2021年は労働者の地方への移住が進む? https://nlab.itmedia.co.jp/nl/articles/2012/25/news118.html
203 名前:デフォルトの名無しさん [2021/02/08(月) 19:09:45.85 ID:UEWD7mIf.net] m1 macbookでc言語始めるのには何が必要ですか? c言語を始めるパッケージとかって売ってるんですか? それともフリーソフトでダウンロード出来るんですか? 学校ではコマンドを打つところから始めたので、導入に関しては全く解りません。
204 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 19:14:35.93 ID:XD2vlsgg.net] 0からのって感じ 良いねえ
205 名前:蟻人間 mailto:sage [2021/02/08(月) 19:31:11.55 ID:ifT1d8uh.net] >>203 clang、gccなどのCコンパイラのインストールが必要。
206 名前:デフォルトの名無しさん [2021/02/08(月) 20:13:50.11 ID:UEWD7mIf.net] >>205 レスどうもです gccほかググってみました @エディタで入力 Aコンパイラで2進数へ変換(ここでgcc使用) Bコマンドプロンプトで実行 これで合ってますか? 合ってるとすれば、エディタは何がいいんでしょうか?
207 名前:蟻人間 mailto:age [2021/02/08(月) 20:21:45.01 ID:ifT1d8uh.net] >>206 Macは異端児だし、自由陣営じゃないから、テキストエディタは自分で選んでね。検索するときは、必ずキーワード「Mac」を付けてね。 コマンドプロンプトはWindowsの場合なんだよな。
208 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 20:44:41.11 ID:0fSH6U0R.net] Linux なら、build-essential で、Ruby のRake でコンパイルする。 VSCode も使える mruby の本も出た Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11 宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。 Ubuntu 18.04, C99 対応 人工衛星イザナギ・イザナミで、使っている
209 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 21:24:52.07 ID:mOpGK7eJ.net] MacでもVSCode、gcc、terminalでええやんけ
210 名前:デフォルトの名無しさん [2021/02/08(月) 22:16:35.01 ID:UEWD7mIf.net] >>209 ありがとー
211 名前:デフォルトの名無しさん [2021/02/08(月) 22:35:42.15 ID:UEWD7mIf.net] 色々教えてもらってありがとう でもなんかrubyから始める方が良さそうなのでそうします
212 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 22:48:15.05 ID:0fSH6U0R.net] Mac で、Cをやる人なんているのか? たいてい、Linux だろ Macの機械語をもらっても、誰も動かせないw
213 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 22:48:56.13 ID:YmxwiogA.net] 一応Visual Studio Community for Mac 何てものもあるけどね MacユーザーじゃないのでWindowsと同じように使えるのかどうかは知らんけどw
214 名前:デフォルトの名無しさん [2021/02/08(月) 22:52:50.26 ID:ObgPii2R.net] m1ではxcodeはだめなのかなあ
215 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 23:04:19.24 ID:WYlwG+td.net] 大昔のmacbookの話だがxcodeなる10GBくらいの開発環境を入れないとほとんど何も弄れなかった記憶 今のストレージ容量ならmacbookでも行けそう
216 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 23:11:34.64 ID:WYlwG+td.net] winは仮想環境も充実してるし色々コンパイラ試せるからいいよね ネイティブサポートもintel mklやVCで結局一番手厚いし
217 名前:デフォルトの名無しさん [2021/02/08(月) 23:18:46.61 ID:nKLqWVxG.net] >>208 F-15はAda、F-35はC++で書かれてる。
218 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 23:37:09.64 ID:0fSH6U0R.net] Linux には、strace という神ツールもある
219 名前:デフォルトの名無しさん mailto:sage [2021/02/09(火) 00:44:38.89 ID:OoGqnNNo.net] >>216 それでもApple環境だけはきついのよなぁ 噂通りiPadにxcode載せてくれれば、俺的に余計な出費なしに楽しめたのに (もちろんiPad自体で開発する気はない)
220 名前:デフォルトの名無しさん mailto:sage [2021/02/09(火) 09:28:59.64 ID:aKFUc8iT.net] >>214 普通に使えるはず VSとか勧めるくらいなら(IDE勧めるなら)macにはxcodeのが正しい
221 名前:デフォルトの名無しさん mailto:sage [2021/02/09(火) 12:16:11.15 ID:To5JxTyF.net] macを選ぶこと自体が正しく無い
222 名前:デフォルトの名無しさん [2021/02/18(木) 19:54:34.90 ID:clnw43k0.net] M1 macbook買ってruby でうっほっほーしてますわ
223 名前:デフォルトの名無しさん mailto:sage [2021/02/18(木) 21:38:45.66 ID:sRdwF113.net] 最近コード読まなきゃならん機会増えてきて教養として読めるようにはなりたい 規格に沿ってなくても勉強にいい感じのインタプリタってないかな?
224 名前:デフォルトの名無しさん mailto:sage [2021/02/18(木) 21:59:26.94 ID:UlBwu06v.net] プロになりたい香具師は、YouTube で有名な雑食系エンジニア・KENTA のサロンに入って、 16〜32GB メモリのMac で、Ruby on Rails でポートフォリオを作る もっと、すごい人は、Windows 10, WSL2, Docker, Ubuntu, mruby で、 C99/Ruby 併用で、人工衛星など宇宙開発してるw mrubyの本も出たし
225 名前:デフォルトの名無しさん [2021/02/19(金) 15:37:54.68 ID:LoU7pdW5.net] 猛烈にNG率高いレス
226 名前:デフォルトの名無しさん [2021/02/20(土) 03:42:06.46 ID:1WE5qKPk.net] みんなRubyとかCでなにしてるの
227 名前:デフォルトの名無しさん [2021/05/17(月) 11:52:26.06 ID:094+MbId.net] srand((unsigned)time(0UL)); int r=rand()%100-1; ってコードがあるのですが返ってくる値がランダムじゃなくて規則性があってモヤモヤしてます 参考書によるとsrandの文が起動時に別の値に毎回変えるための文らしいんだけど 返される値が8,18,28,28,38,48.......と10ずつ繰り上がっていってランダムになってません 何を追加すれば規則性が消えるでしょうか?
228 名前:デフォルトの名無しさん mailto:sage [2021/05/17(月) 12:50:25.63 ID:ZeUb3kXE.net] >>227 0 以上 99 以下 の乱数を取得したいなら、 int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 100.0 ); 0 以上 98 以下 の乱数を取得したいなら、 int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 99.0 );
229 名前:デフォルトの名無しさん mailto:sage [2021/05/17(月) 13:21:28.15 ID:giSQx4b2.net] www.math.sci.hiroshima-u.ac.jp/m-mat/TEACH/ichimura-sho-koen.pdf www.math.sci.hiroshima-u.ac.jp/m-mat/MT/mt.html https://qiita.com/seekworser/items/54e2b4596e72e8b9f9ea
230 名前:デフォルトの名無しさん mailto:sage [2021/05/17(月) 19:09:43.71 ID:lfAH/Fki.net] >>227 これ使うのはダメ? https://cpprefjp.github.io/reference/random/mt19937.html
231 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 02:31:27.98 ID:+SAIeHDc.net] >>227 疑似乱数は一定の規則に従って生成されるんだから規則的なのは当たり前。 それがどのくらいわかり難いのかという程度問題に過ぎないし、 どういった系を選ぶのが適切なのかは用途次第。 そしてよくある失敗だがランダムシードに時刻を使うなら時刻から予測できる可能性がある。 rand がどういうアルゴリズムで乱数生成するのかは言語仕様では規定していないけれど、 (乱数がとりうる範囲や、同じシードからは同じ乱数列が得られるという性質は規定している。) 伝統的に線形合同法で実装されることが多くて、 パラメータの選定や用途によっては露骨に規則的に見えることもある。 C++ では >>230 の言う通りメルセンヌツイスタが標準ライブラリとして提供されているのだから それを使うのは妥当な解決方法である可能性は高い。 とはいえメルセンヌツイスタは簡単な物理シミュレーションなどにはおおよそ十分であるにしても 暗号用途には使い物にならないし速度はやや遅いので乱数が大量に必要な場合には 適切とは言えない。 かといって本物の乱数 (環境ノイズなどから生成される乱数) は再現性がないし、 これもまた遅すぎるので大量の乱数が必要な場合には向かない。 繰り返すけが乱数は用途に適しているかどうかであってあらゆる場面で万能な方法はない。 用途次第、状況次第。
232 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 08:10:11.28 ID:ysWtxNVs.net] 229にこれも組み合わせ https://cpprefjp.github.io/reference/random/uniform_int_distribution.html
233 名前:226 mailto:sage [2021/05/18(火) 22:58:17.77 ID:wt3ZqlEf.net] 今C言語を学習してるのですがC++じゃないと完全ランダムは無理なのですね…。 RAND_MAXは関数なのでしょうか?Cだと使えなかったです。 教えてくださってありがとうございました。
234 名前:230 mailto:sage [2021/05/19(水) 00:18:20.95 ID:ONEwpJm5.net] >>233 「完全なランダム」とは何か定義して。
235 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 00:55:55.90 ID:g9DnnU6R.net] せっかくなのでC++を勉強してみては?
236 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 01:16:05.73 ID:OYngDuIu.net] 何をやりたい目的があるから、何々を勉強するだと、速いですよ。
237 名前:はちみつ餃子 mailto:sage [2021/05/19(水) 01:17:09.90 ID:ONEwpJm5.net] このスレは C++ スレだからな。 C++ は C との互換性のために残している機能はあるが C++ 的にあまり好ましくない場合もあるし、 完全な互換性が維持されているわけでもない。
238 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 01:36:10.61 ID:OYngDuIu.net] スレ建てといただす。 0からの、超初心者C言語相談室 https://mevius.5ch.net/test/read.cgi/tech/1621355654/
239 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 01:52:35.92 ID:yT7tFlzp.net] >>233 RAND_MAXは、古くから有るマクロ定数で、stdlib.h で例えば次のように定義されている: #define RAND_MAX 32767 説明によれば: 「rand関数が返す最大値。処理系によって異なるが、最低でも 32767以上である。」 rand()は偏りが強いには強いが、それでも 227 のように書けば 226 のように 下一桁がいつも8になるようなほどではない。
240 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 01:54:51.13 ID:yT7tFlzp.net] 少なくともrand() は、>>228 のように書けば、メルセデスツイストなどの 乱数を使わなくとも普通に使える。>>227 のように書くとダメなだけ。
241 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 10:58:56.45 ID:G7N6xM6g.net] 0から7の整数が均等確率で出る乱数をrとした場合、 x = r % 3; とすると、xは0〜2までの整数が出るが、均等確率ではない。 それはすべてのパターンを書いてみると分かる:(r,x)を書いてみると、 (0,0) (1,1) (2,2) (3,0) (4,1) (5,2) (6,0) (7,1) x= 0 となっているのは、3回。 x= 1 となっているのは、3回。 x= 2 となっているのは、2回。 なので、 P(x=0)=3/8 P(x=1)=3/8 P(x=2)=2/8=1/4 となり、x=2が出る確率だけが小さくなってしまう。 これと同様に、rが0〜32767を均等確率で出す乱数の場合、x=r % 100の値は0〜99までだが xが0〜99になる確率は均等ではない。
242 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 12:10:26.94 ID:G7N6xM6g.net] なので、もし、とても偏りの少ない乱数を用いたとしても >>227 では均等に 出現しない。 それを解決するには>>228 のようにすればよい。というか227が標準的なrand()の 使い方。 227 だともしrand()が均等確率で出ているならば、結果も均等に出現する。
243 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 13:29:25.47 ID:G7N6xM6g.net] ちなみに、rand()は、出力範囲内の整数を全て出力し終わってから元の値に 戻る様になっているので周期も RAND_MAX + 1 に等しく、出力値は 均等確率で生じる。 >>227 だと10で割った時の余りが必ず8になっておりそれは、出力が 10n + 8 になっているということ。これだと、今言った法則に当てはまって ないので矛盾し、何かがおかしい。
244 名前:デフォルトの名無しさん [2021/05/19(水) 15:03:30.63 ID:SQApMI36.net] C言語でのサーバー構築のやり方わかる方いますか?
245 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 15:05:53.17 ID:G7N6xM6g.net] >>244 HTTP サーバーのことかな?
246 名前: mailto:sage [2021/05/19(水) 19:58:38.12 ID:Y2/6iGxL.net] >>244 バークレーソケットをオープンしてリスンして、接続してきたのなら fork() だのスレッドで処理だの、というのを昔したことがありますが、すっかりわすれてしまいました… どんなサーバーが欲しいのですか?簡単なサーバーならご要望に応えてテキトーに書く準備はありますよ
247 名前:はちみつ餃子 mailto:sage [2021/05/19(水) 23:06:46.13 ID:ONEwpJm5.net] >>242 それはよくある勘違い。 >>228 の方式では均等にならない。 櫛状にばらける。 0〜32767 の乱数から 0〜99 の乱数を得るには 32700 以上の値が出たときにそれを捨てて そうでない値のときに 100 の余りをとればいい。 少なくとも私の手元の環境にある std::uniform_int_distribution はそのように実装されている。
248 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 23:56:26.10 ID:l+JWTKLH.net] >>242 はアホと思ったけど、 こんな勘違いをするアホがよくいるって? そんなアホな
249 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 00:27:22.67 ID:qlUu+R49.net] >>247 uniform_real_distributionの時は?
250 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 02:25:38.74 ID:Dz+v3/+O.net] >>227 の結果は予想と外れていると思う。 rand()は均等確率のはずなのに、100で割って下一桁に9ばかり出るはずはない。
251 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 02:28:22.34 ID:UJvm/t/I.net] >>247 なるほど。言われてみればそうだわ。 32767はもともと100で割り切れないから、一部を捨ててやらないと 均等にはならないな。
252 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 02:52:09.51 ID:onv6EMq1.net] しかし、昔実験してみた限り、rand()の周期は、通常、RAND_MAX + 1 であり、rand()自体は均等確率のはずだ。 それはべつに、>>247 ではちみつが言っていることと矛盾するわけではない。 RAND_MAXが32767のように100で割り切れない値だから、>>228 のようにすると、端数の様な部分でわずかに均等確率からずれてしまう。 ただし、ずれる範囲は、32767/100 = 327.67 なので、確率にして 0.67/327 程度以下の小さなずれではあるが。
253 名前: mailto:sage [2021/05/20(木) 22:00:26.21 ID:+zMkmbAL.net] >>247 剰余を取って特定範囲の乱数を生成することができるのは、元の乱数が MT 並に性質がよいときだけかと、つまり >>247 はちみつ氏のやりかたは、元の乱数が優れたものだからできる方法 MT が発明されるまでは、最悪の方法「線形合同法」でもなんとか我慢できる部分範囲の乱酔生成法しか推奨されなかった C FAQ をみてもそれがわかりますね www.kouno.jp/home/c_faq/c13.html#16 13.16: A:ある範囲の整数からなる乱数はどうやったら生成することができるか。 Q:すぐに思い付く、 rand() % N (これは0からN-1までの数を返そうとする)は乱数の質が低い。なぜな ら乱数発生器の多くで下位のビットは悲惨なほどランダムでない。よりよい方法は以下のようなものである。 (int)((double)rand() / ((double)RAND_MAX + 1) * N)
254 名前:はちみつ餃子 mailto:sage [2021/05/20(木) 23:50:59.51 ID:qkpZwp6c.net] >>253 乱数ソースの性質の悪い部分を分布関数で修正するのはレイヤの分離がきちんと出来ていない感じがして嫌だな。 下位ビットを捨てるなら捨てるでそれが明示的であるほうが好ましいと思う。
255 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 00:17:02.51 ID:Q+lecBxK.net] QZからはキムチの匂いがする
256 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 10:19:44.69 ID:pMLUvwAV.net] いずれにせよ >>227 は、まともな標準ライブラリで試すと 226 のような結果に はならないはず。理由: 226では、rand()%100の下一桁が常に9だが、それだとrand()は常に奇数という ことになるが、実際のrand()は全て奇数ということはないから。 現象的には、偶数と奇数が交互に来るという不具合が知られていたりするが、 全部奇数ということはない。
257 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 10:27:54.72 ID:b4MjZLXj.net] 超初心者スレであることを考えると >>227 の srand() がプログラム起動時一度だけとも限らないのでは。
258 名前:はちみつ餃子 mailto:sage [2021/05/21(金) 13:18:40.70 ID:JT5uzYpW.net] Windows の (msvcrt の) rand は線形合同法だが下位バイトを豪快に捨ててる。 そのせいか (下位バイトを捨てない線形合同法よりは) 乱数としての質は多少良いが 初期値の違いに鈍感で、初期値が似ていれば最初の乱数も近いということが起こる。 >>257 の指摘は妥当かもしれない。
259 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 17:16:26.14 ID:qriMwFf7.net] >>257 つまり、rand()だけを繰り返しているのではなく、srand()とrand()の組を ひっくるめて繰り返しているようなことなのかな。 なるほど、それなら問題の焦点はsrand()と時刻の関係性になるので >>227 のような結果になったとしてもおかしくはないな。
260 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 17:24:43.18 ID:qriMwFf7.net] なるほど。 質問者は、だから>>228 でも快い返事をしてくれなかったのか。 彼は例えば、以下の様に書いていたようだね: (1) for ( int i = 0; i < 20; i++ ) { srand((unsigned)time(0UL)); int r=rand()%100-1; printf( "r=%d, ", r ); } 本来は、こう書くか、 (2) srand((unsigned)time(0UL)); for ( int i = 0; i < 20; i++ ) { int r=rand()%100-1; printf( "r=%d, ", r ); } こう書く: (3) srand((unsigned)time(0UL)); for ( int i = 0; i < 20; i++ ) { int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 100.0 ); printf( "r=%d, ", r ); } この中で(1)はダメ。(2)も余り良くない。(3)はplain Cでの簡単な書き方では 標準。しかし、わずかに均等確率からはズれる。
261 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 18:35:20.74 ID:ojw3YA/u.net] >>256 >>227 を見れば乱数になってないことは一目でわかると思うのだけど >>256 の時点で毎回srandを呼んでるのかとも思ったけど、 それにしても値が綺麗すぎる。
262 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 19:25:04.91 ID:UZ6lwfzX.net] Cはよくわからんのだけど(3)のやつわざわざdoubleにキャストする必要あるの?
263 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 20:07:22.28 ID:ojw3YA/u.net] RAND_MAX + 1 でオーバーフローするとか
264 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 20:19:47.95 ID:UZ6lwfzX.net] 最低でも32767以上だからINT_MAXのときもあるのか… ありがとうございます。
265 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 20:22:18.98 ID:UZ6lwfzX.net] と思ったけどRAND_MAX+1.0した時点でdoubleになるんじゃ?
266 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 20:30:15.34 ID:ojw3YA/u.net] >>265 なるけど 書かなくても動作が同じであれば書かない主義? カッコとかコメントとか 1.0 も 1. で良いんだよ まあそれ以前に (3) はカッコの対応がおかしいな
267 名前: mailto:sage [2021/05/21(金) 20:40:21.60 ID:XRGlJQOp.net] >>254 確かに今となっては MT が開発されてしまったので、その感覚は理解できます しかし、我々は MT がなかった頃の好き古き時代についても考慮するべきでしょう、過去の方法を評価するのに、その当時の技術的制約を考慮せずに「今の価値観」で裁断するのはフェアではない、と私はつくづく考えているのです
268 名前: mailto:sage [2021/05/21(金) 20:47:24.81 ID:XRGlJQOp.net] >>257-258 なるほど、従って >>227 に対する適切なアドバイスは次のとおりだと私は提案します >>227 MT = メルセンヌ・ツイスタを使いなさい srand() とか rand() は忘れなさい、これらは化石時代の乱数生成法だから、今となっては srand() とか rand() をあえて使う合理的理由は存在しません MT の導入方法や使い方は、次の私のソースを参考にしてください https://ideone.com/M2SRcE https://mevius.5ch.net/test/read.cgi/tech/1434079972/60
269 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 21:29:08.32 ID:ojw3YA/u.net] どう見ても乱数生成法の質の問題じゃない 使い方が間違ってる 乱数の質を求めるならハードウェアの乱数生成命令を使うのが一番だが >>227 はそういうレベルじゃない
270 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 21:33:53.10 ID:ojw3YA/u.net] Visual Studioで以下をやったら>>227 みたいな値になった 3秒ごとにsrand/rand をコールしてるんでしょう for (int i = 0; i < 100; i++) { srand(i*3); printf("%d\n", rand() % 100); }
271 名前: mailto:sage [2021/05/21(金) 23:18:48.19 ID:XRGlJQOp.net] え? >>227 って srand() を複数回呼んでいるんですか?確かにそれは間違っていますね… srand() は普通、アプリ起動直後に一回だけ呼べば十分ですよ…
272 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 02:03:33.66 ID:8I9NK3Yz.net] >>270 洞察すれば、こんな風だろうか? (端末で確認しながら三秒間隔でEnterキーを押している) : for ( int i = 0; i < 20; i++ ) { srand((unsigned)time(0UL)); int r=rand()%100; printf( "r=%d\n", r ); getche(); // 3 秒間隔で人間が Enter キーを押す。 }
273 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 02:04:35.75 ID:MF6mf+kw.net] >>270 洞察すれば、こんな風だろうか? (端末で確認しながら三秒間隔でEnterキーを押している) : for ( int i = 0; i < 20; i++ ) { srand((unsigned)time(0UL)); int r=rand()%100; printf( "r=%d\n", r ); getche(); // 3 秒間隔で人間が Enter キーを押す。 }
274 名前:デフォルトの名無しさん mailto:age [2021/06/02(水) 11:54:46.08 ID:QfG+Xq1u.net] 書籍の意味が分からないので教えてほしいのですが それ以外のって部分から何を言ってるのか全く分かりません ”signed char a;である時は、aには−128〜127の数値しか入れられません。それ以外の数値を入れようとすると、普通は一番下の1バイト、つまり2進数での下8桁だけになり、上の方の桁は全て切り捨てられてしまいます。 最大値より大きい値になった時をオーバーフロー…略”