[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 07/20 16:42 / Filesize : 347 KB / Number-of Response : 1000
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

0からの、超初心者C++相談室



1 名前:デフォルトの名無しさん [2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr.net]
何にも知らない0からの出発、超初心者のためのC++相談室

164 名前:デフォルトの名無しさん mailto:sage [2020/09/21(月) 11:38:59.68 ID:xNmUS8x8.net]
寿限無名予防以外の目的?

165 名前:デフォルトの名無しさん [2020/09/21(月) 11:59:08.18 ID:IzAwgxqY.net]
>>162
C#よくわかってないけど
こういうことが知りたいの?
https://ideone.com/SP3uBF

166 名前:デフォルトの名無しさん mailto:sage [2020/09/21(月) 21:53:00.21 ID:GP+Uv9qA.net]
>>165
すいません、そういうことです。
usingについてはおかげさまで意味が分かりました。ありがとうございます。
namespace名前空間?と言うもののメリットと言葉の意味がいまいち分からないのですが、
どっからどの部分までが名前空間なのでしょうか

167 名前:デフォルトの名無しさん [2020/09/21(月) 23:03:56.25 ID:IzAwgxqY.net]
>>166
namespaceがなかったら
たとえば自分でなにか作ってるときとか、そこには自作のメソッドの定義があるわけで
さらに公開されてるライブラリを使いたくなって、いざそこに組み込んだとき、
自作のメソッドと同名のメソッド名がライブラリ内で定義されてたらコンパイルエラーが発生する
(重複定義された場合はコンパイラからすればどちらを呼び出していいかわからない)
みたいな事態が発生してしまう

さっきの例だと同名のメソッド(Console.WriteLine)を定義してても
System名前空間とMyNS名前空間で分けたからコンパイルが通る
System.Console.WriteLine(s); // Console.WriteLineはSystemに属するもの
MyNS.Console.WriteLine(s); // Console.WriteLineはMyNSに属するもの

namespace Hoge {
// {}内はHoge名前空間に属する
}

168 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 06:36:29.84 ID:ZtayyY2i.net]
完全にC++の感覚でしか説明できんけど、
あるライブラリを開発する上で、そのライブラリ全体がnamespaceで囲われていると、
ライブラリ作者は大抵その名前空間内でコードを書くから、いちいち名前空間を指定する必要は無い
さらに>>164の言うように、名前空間がライブラリや機能を表しているから、その中のコードは短い命名に出来る

ライブラリ利用者側からすると打鍵数は変わらない(か、下手すると増える)けど、その名前をよく使うソースコードなら、usingで取り込むことも出来るし、あまり使わないなら取り込まず毎回指定してもいい(その場合名前重複の心配もない)
こういう取捨選択は、関数・クラス名に全部ライブラリ名や機能名のプレフィックスが付くような命名だと出来ないこと

あと_privateみたいな名前空間に関数を書けば、ユーザーが触る必要の無い関数を隔離出来る(使用を禁止までは出来ないけど、補完の候補に出てこないのは便利

169 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 13:09:23.63 ID:iGBGeTHm.net]
名前空間を使うと検索性が最悪になる
(別の名前空間の同一名称が引っ掛かりまくる)
みんなどう対処しているんだろう

170 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 17:08:47.15 ID:QYfnOwKH.net]
>>169
using namespaceするのが問題じゃない?

171 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 17:49:49.66 ID:ZtayyY2i.net]
いやusingに限らず、例えば>>168で言ったライブラリ作る側(名前空間内で作業する側)はいちいちhoge内なのにhoge::とか書かんでしょ
確かに検索で困ることはたまにある・・

172 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 19:24:25.17 ID:Xh0fS725.net]
namespace で絞り込んで、識別名をハイライトして、あとは気合



173 名前:デフォルトの名無しさん [2020/10/20(火) 13:37:38.41 ID:Mso39Itu.net]
C++とVisual C++の違いについてです。
C++はプログラミング言語であり、
VC++は統合開発環境であるという説明があります。
でも私にはVC++がC++++のように見えます。
VC++はC++の文法に新たな流儀を付け加えるか置き換えていて
言語そのものの使用を若干変えているように見えます。
C++のキーワードが別のものに置き換わっていたりするからです。
そのため、C++を勉強したあとにVC++を学ぶと違う言語を学んでいるように感じます。
この理解は正しいでしょうか。

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のときもあるのか…
ありがとうございます。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<347KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef