1 名前:デフォルトの名無しさん [2010/03/05(金) 16:51:13 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.71【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1264774545/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm codepad.org/ (コンパイルもできるし出力結果も得られるのでお勧め) ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。
297 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 19:03:07 ] C++では int[] a; 表記OKになったんだ これはint配列を指すポインタ aを表すの? まさか参照じゃないよね
298 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 19:05:23 ] Java臭いな
299 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 19:07:03 ] どこかのスレで「ポインタ」と「ポインタが指す先」を「宝箱の地図」と「宝箱」で解説しているのを思い出した。 int x; // 「int型の宝箱」 int* y; // 「int型の宝箱」の地図 y = &x; // &でxの地図を取得してyに代入 *y = 10; // 地図であるyが指す宝箱への代入
300 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 19:25:24 ] >>293 型が無いって断言しちゃうのはあれだけど、大体言いたいことは合ってる。 何々型の、何々 って記法で、何々=変数名の方を修飾する・・・例えばポインタをあらわす*や配列を表す[5] のようなものは、 なんて言ったらいいのかな・・・ 型の宣言が2段構えになってるようなイメージで捉えればいいんじゃないかな。 ただJavaやC#のような言語の場合は、その辺すっきりまとめて全部同じような型としちゃう傾向があるから、 そっちと混同すると混乱する可能性はあるような気がする
301 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 23:11:53 ] >>288 ありがとうございます。やっぱりそうですよね。 >要素数4の配列へのポインタを配列確保する演算子なので 演算子はどれを言っているんですか?
302 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 00:09:46 ] >>301 「new」演算子
303 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 01:26:50 ] >293 型について間違ってるよ。 C/C++では、ある識別子の型は、その宣言から識別子を省いたものと定義されている。 だから以下のようになる。 int i; => iの型はint int *p; => pの型はint* int a[10]; =>aの型はint[10] あと変数の宣言(かつ定義)についての説明も誤り。定義された時点でメモリは確保される。 宣言の説明も出鱈目すぎる。以下訂正版を挙げる。 int x; 「intとして扱う領域」 が確保される。auto変数なら、値はゴミ。 int *y; 「int*として扱う、領域」 が確保される。auto変数なら、値はゴミ。つまり出鱈目なところを指している。
304 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 13:25:00 ] あるクラスを実装するためだけに使うヘルパクラスがあったとして、普通に考えると namespace{ class HelperClass {...}; } を実装したいクラスのソースの頭らへんに書くと思うんだけど、これをファイル分割したい場合どうすればいいだろうか
305 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 13:46:09 ] >>304 namespace detail
306 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 14:39:16 ] WinAPIのRectangleってright-left<=0の場合って未定義?
307 名前:デフォルトの名無しさん [2010/04/02(金) 07:52:17 ] コンピュータ言語を何か覚えたくて疼うずしつつも、一歩踏み出せていない初心者です。 やっぱりCかなと思い、ここに来ています。今は特に作りたいものがないんですが、 プログラムが書けるようになったらやりたいことは沢山ありそうです。 勉強のために、10分くらいで出来そうな練習問題を出してくれませんか? モチベーションがあがりそうです。
308 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 08:09:37 ] TopCoderでもやれ あるいはICPCの過去問探し出してやれ
309 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 08:17:07 ] 初心者がいきなりそれはどうかと思う 1-nまで足すプログラム 文字列を逆順にするプログラム 好きなほうをどうぞ
310 名前:デフォルトの名無しさん [2010/04/02(金) 08:28:27 ] >>308 www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html こんなやつですね。 たしかに面白そうですね。 やったら添削していただけますか?
311 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 12:05:24 ] class Foo{ Hoge* hoge } このhogeに多態的に要素を持たせたいのですが templateをつかうか、コンストラクタに要素をしていさせるかどちらがよいでしょうか?
312 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 12:25:24 ] >>311 ポインタはスマポにしたほうがいい templateだったらhogeをポインタにする必要が無いな。
313 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:00:21 ] すみません、考え方の整理をしたいので質問させて下さい。 自分は普段、Java と C# をメインに開発している者なのですが、趣味の範囲で C/C++ を真面目に 使いたいと思い、ここしばらくずっと勉強を続けています。 質問内容は、「C++ で言うクラス"名" は、C で言う構造体のタグ名と同じ捉え方でいいのか」 です。 具体的に言うと、C(/C++) の構造体について、現在自分はこのように捉えています。 struct { 内容 } 変数名A, 変数名B; は、その内容を構造として持った複合体のような変数として、宣言している。ちょうど、 int 変数名A, 変数名B; での、型名 int の部分が、{ 内容 } の形で表現されているような状態。 そして実際の記法としては、それが構造体の宣言である事を明示するため、struct と最初に書いてコンパイラに伝えている。 さらに、あとでこの同じ構造を再度利用したい(新しい変数を使いたい)場合に備え、 ここに一発で同じ内容を示す為の 「タグ名」 を、書くことも出来る。 そしてそれは、 struct タグ名 { 内容 } 変数名A, 変数名B; と、ある時、 struct タグ名 変数名C; のようにして簡易に使うことが出来る。 で、C++ になってからこの再度宣言する際の struct の一文は省略できるようになったので、 まるで Java や C# で言うクラス名のように見えているけど、 実はこれは元々再呼び出しの為の、タグ名だった。 そして、C++ になって今度はより仕掛けの拡張された class が登場したが、この時の class 名前 { 内容 } 変数名; にある "名前" の部分は、上記理解中にあるタグ名と同様に捉えておいていいんでしょうか、という事です。 よろしくお願いいたします。
314 名前:313 mailto:sage [2010/04/02(金) 15:02:41 ] 誤解を招きそうな表記をしたので訂正します ×実はこれは元々再呼び出しの為の、タグ名だった。 ○実はこれは元々再度宣言する際に記述を省略する為の、タグ名だった。
315 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:25:13 ] >>313 俺もそんな感じに理解してた。こういう記述が出来る訳だからな class Foo { public: void bar() { class { public: int add(int x, int y) { return x + y; } } calc; int a = 1; int b = 2; printf("%d", calc.add(a, b)); } }; 厳密に同じなのか、については裏を取らないと自身無いが
316 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:33:35 ] 深く考えすぎ。全部型だよ。 int型、float型、struct foo型、class bar型 int ってのは組み込みの型 class bigintと書けば自分でbigintという型を定義できる。 int a = 0; bigint b = 0;
317 名前:313 mailto:sage [2010/04/02(金) 15:47:49 ] >>315-316 レスありがとうございます。そもそも気になったきっかけが、C/C++ でのこの構文を見たせいなのです。 class 名前 { 内容 } 変数; Java や C# での感覚だと、この位置に "変数" が来るのが理解出来ませんでした。 そしてそれで使えるって、いったいコンパイラはこれをどう解釈してるの? と疑問に思った事がきっかけでした。 一応、>>316 さんが言うように、「それはそういう型。全部ただの型だ」 はわかるのですが、 上記の点で、どう言う意図でこのような構文になっているのか理解できず、その為色々調べた所、 C での struct が >>313 にあるような内容だと知り、それならば C++ で増えた class についても同様なのかなと思いました。 上記の構文から、「ただの型だ」 では曖昧に思ってしまう所があり、質問させて頂きました。すみません。
318 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:57:04 ] CとC++で違いがあるからその影響かな。 struct xx { ... } ; typedef struct xx xx; // C++ではこれが省略できる。 xx v;
319 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 16:06:19 ] >>317 C++ではstructとclassはほとんど同じってのは知ってる? 違いはメンバのアクセス指定を明示しないときのデフォがstructはpublic、classはprivateって所だけ。
320 名前:313 mailto:sage [2010/04/02(金) 16:26:55 ] レスありがとうございます。 >>318 typedef struct { 内容 } 名前; 名前 v; なら、そのまま名前の定義になるのでわかるのですが、 struct のタグ名と class のクラス名と言われている場所の名前について、同じかどうかが気になったのです。 >>319 質問にも書かせていただきましたが、むしろ同じかどうかを知りたかったのです。 では変な言い方かもしれませんが、同じと思っていいわけですね。 ただ、C++ に変わって「タグ名」という言い表し方は、ただのC時代からのレガシーと思えばいいという感じでしょうか。
321 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 16:50:24 ] 何が疑問なのか分からなくなったが、規格上の話をしたいならそれはTagということでいいよ。 ただ考え方としては型名で、Cとの互換からTagとしての属性を残していると考えてよい。
322 名前:313 mailto:sage [2010/04/02(金) 17:00:48 ] >>321 ありがとうございます! >ただ考え方としては型名で、Cとの互換からTagとしての属性を残している この一言ですっきりしました。 あと >>315 さんの calc の行と合わせて、>>319 さんの言う 「ほとんど同じ」 も合わせて、 すっきりしました。 ありがとうございました。
323 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 17:53:27 ] なぜboostには動的削除子付きの非共有スマポがないの?
324 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 22:32:56 ] >>323 それは君がまだライブラリの提案を出していないからじゃないかね?
325 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 15:29:48 ] スマートポインタを使うにしろ自作するにしろ 過去の蓄積との整合性を保つのが面倒だし一度使い出すと今後ずっと縛られることになるしなぁ 標準で実装されてるならともかく、 いくらboostみたいな有名なライブラリとはいえ非標準に依存するのはちょっと違和感あるなと時々思う
326 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 16:49:37 ] >>325 > 非標準に依存するのはちょっと違和感あるなと時々思う 外部ライブラリもAPIすら使わないで 標準C/C++の範囲だけで書かれた有名なソフトウェアは 俺は一つもしらんのだが。 C/C++の限界でしょそれは。
327 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 19:02:31 ] >>326 フレームワークみたいな使い方になっちゃうってことじゃない?
328 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 02:34:35 ] メンバ変数のないメンバ関数だけのクラスのサイズは0でよいのでしょうか?
329 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 02:37:59 ] >>328 そうとは限らない。
330 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 02:48:38 ] >>328 C++では0ではない事が規格で保証されている 理由を聞くとアドレスを取るためだと
331 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 10:28:12 ] 何故クラスのサイズが0だと思ったのか
332 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:02:22 ] Cでは空の構造体のサイズが0になるからだろ C++は仮想関数などポインタに入れて使う使い方もあるので (もっともvtableなどで元々0ではないかもしれないが)空の 構造体やクラスでも0にはならないように設計されている
333 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:25:49 ] >>328 > メンバ変数のないメンバ関数だけのクラスのサイズは0でよいのでしょうか? むしろほぼ間違いなく0にはならないことが保証される。 例外はEBOが働いた時のみ
334 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:31:20 ] じゃあ空の構造体はCとC++で互換性が無いのか
335 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:43:37 ] ( ・∀・)つ〃∩ へぇ〜初めて知った EBO (Empty Base Optimization) 空の基底クラスの最適化。 メンバ変数を一個も持たない、空のクラス、というものが出来ることがあります。 しかし空のクラスであっても、アドレスは一意に決めなくてはならないので、 izeof( EmptyClass ) は 0 にはなりません。 EmptyClass arr[100]; assert( &arr[0] != &arr[1] ); // アドレスは違ってて欲しい単独で使う時には この無駄は仕方のないところですが、 例えばこの空クラスから他のクラスを派生 するときは、EmptyClass の分のサイズは 0 にして、派生クラスのメンバ変数の 分だけを確保する、という最適化が可能です。 C++の規格で許されているこの 最適化のことを、Empty Base Optimization と呼びます。
336 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:43:45 ] >>334 sizeof(空の構造体)が0になることがC言語の標準規格で保証されていたかは 記憶にないけど、もしそうならC++と互換性が無い点になるだろうね。 でもsizeof(空の構造体)==0に依存したソースってどんなんだ?
337 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 16:00:36 ] >>332 ISO C 6.2.6.1 p2 > Except for bit-fields, objects are composed of contiguous sequences of one or more bytes, ... C でもサイズは 0 にならないよ。
338 名前:336 mailto:sage [2010/04/04(日) 16:14:04 ] >>337 ほー。 じゃあむしろEBOが特例でサイズが0となり、 それ以外は標準C/C++では必ず1 or more バイトはかかるわけだ。 ありがとう。
339 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 00:47:17 ] struct hoge {}; struct hoge fuga[42]; で&fuga[0] < &fuga[1]でないと色々厄介だからね。
340 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 14:34:38 ] class iface {...}; class impl_a : public iface {...}; impl_a a1, a2, a3(a1); // ok a1 = a2; // ok iface &i1 = a1, &i2 = a2; // ok iface i3, i4(i1); // ng i1 = i2; // ng ifaceの生成コピー代入を禁止したままimpl_aの生成コピー代入を許可する、再利用性のあるイディオムはありますか? protectedな生成コピー代入をifaceに持たせれば仕様は満たすのですがこれは再利用性がなく boost::noncopyableではimpl_aもコピー代入不可になってしまうので条件に合いませんでした
341 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 17:54:44 ] かな、ローマ字入力方式がどちらなのか取得したいのですができません。同じ値が常に出力されます。 どうすればいいでしょうか? 切り替え自体はできてます。 2kXPVista7、OSデフォルトかOffice付属のIME 検証自体はwindows 7 office2007IME VC++2008Expressでしてます。 codepad.org/cVmmTnfL
342 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 20:30:55 ] >>340 生成すら不可にしたいならインターフェースクラスにするとかかな? 良いのが思いつかないので下で探して。 ja.wikibooks.org/wiki/More_C%2B%2B_Idioms
343 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:01:28 ] コピーコンストラクタでメンバ変数ポインタの中身をディープコピーしようと思うのですが メンバ変数ポインタの型の代入演算子に依存しないディープコピーの方法はないでしょうか?
344 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:04:54 ] Hoge(const Hoge &other) : fuga(new Fuga(*other.fuga)) { }
345 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:05:54 ] >>343 > メンバ変数ポインタの型の代入演算子に依存しないディープコピーの方法はないでしょうか? 素直に普通にCopy Constructorを書くとそうならない? テンプレート引数をT型とすると、 // Copy Constructor MyClass(const MyClass& other) { pointer = new T(*other.pointer); // pointerは生ポインタ or スマートポインタ型とする。 } じゃダメなんすか?
346 名前:345 mailto:sage [2010/04/05(月) 23:06:50 ] 演算子の優先順位が不安になったから少々修正。 // Copy Constructor MyClass(const MyClass& other) { pointer = new T( *( other.pointer ) ); // pointerは生ポインタ or スマートポインタ型とする。 } じゃダメなんすか?
347 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:37:38 ] メンバ変数ポインタって A B::*p; とかのことか? 汚いけどこれでどうよ。 #include <new> class A { public: A() {} }; class B { public: B() : m_a(operator new(sizeof(A))) { } ~B() { operator delete(m_a); } A* GetA() { return reinterpret_cast<A*>(m_a); } const A A1; const A A2; const A A3; void Copy(const A B::*p) { GetA()->~A(); new (GetA()) A(this->*p); } private: void* m_a; }; int main() { B b; b.Copy(&B::A1); b.Copy(&B::A2); b.Copy(&B::A3); }
348 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:08:37 ] メンバ変数ポインタだと別な意味なことにいまさら気がついた ポインタ型メンバのポイント先とでもいえばいいのかな? >>346 これも言葉足らずでした コピーコンストラクタや代入演算子のような相手方の実装に依存しないコピー、ということでした
349 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:50:07 ] >>340 iface に純粋仮想関数を宣言する。
350 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:51:33 ] >>348 コピーコンストラクタやコピー代入演算子を使わずにコピーしろというのか?
351 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 06:40:36 ] なにそれこわい
352 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 07:22:33 ] コピコンも代入演算子も禁止してディープコピーとか正気の沙汰じゃないぞw というか、相手方の実装に依存しないためのコピコンや代入演算子じゃないのか
353 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 07:23:23 ] >>349 相手方の実装におもいっきり制約かけてんじゃん
354 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 08:22:59 ] 多分、本当にやりたいことは微妙に違うんじゃないの? void* で持ってて型情報が消えてるんだけど deep copy したいとか。 だったら、type erasure あたりでぐぐれば参考情報があるかも。
355 名前:デフォルトの名無しさん [2010/04/07(水) 05:32:01 ] Windowsでミリ秒まで計測する方法を教えてください
356 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 05:38:11 ] >>355 ttp://www14.big.or.jp/~ken1/tech/tech19.html
357 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 13:23:05 ] RAIIに関する質問なんですけど、デストラクタでリソースの開放を行った場合 生のリソース開放処理が失敗した場合に例外も戻り値も使えないのでエラーを通知する方法が無いように思えるのですが 開放に失敗した時に、(侵入的ではない方法で)何か処理をしたい場合はどうすればいいんでしょうか?
358 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 19:30:14 ] >>353 インターフェースってそういうもんじゃないの?
359 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 19:34:56 ] >>357 リソース解放を行って成功したかどうかを返すメンバ関数を追加する。 デストラクタにも解放処理は置くけど、こっちはエラーを通知しない。 かわりにログを吐くか、あるいはその場で死ぬか。
360 名前:デフォルトの名無しさん [2010/04/08(木) 16:29:19 ] clock()を使って計測する際、OpenMP等を使ったりした場合でも、CPU時間を求めることができるのでしょうか?
361 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 16:44:57 ] はい。
362 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 18:44:46 ] clockって実時間じゃなかったの??
363 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 19:04:04 ] >>362 少なくとも、POSIXのclock()はプロセッサ時間だよ。
364 名前:デフォルトの名無しさん [2010/04/09(金) 11:16:13 ] ソリューションSの中にP1,P2という二つのプロジェクトを入れています。 プロジェクトP1の中にLobbyForm.hというヘッダーファイルがあり、プロジェクトP2内のmymain.cppの中でLobbyForm.hをインクルードしています。 当然mymain.cppの2行目に#include "LobbyForm.h"と記載しています。 これでVisualC++2008EEにてソリューションのビルドをかけると以下のエラーが出ます。 エラー 2 fatal error C1083: include ファイルを開けません。'LobbyForm.h': No such file or directory c:\users\********\documents\保存用\projects\lobbyformmain\lobbyformmain\mymain.cpp 2 LobbyForm.h(インクルードするヘッダーファイル)の場所 C:\Users\********\Documents\保存用\projects\LobbyFormLib mymain.cpp(インクルードの宣言場所)の場所 C:\Users\********\Documents\保存用\projects\LobbyFormMain\LobbyFormMain どの部分を直せばビルド可能になりますでしょうか?教えてください。
365 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 11:17:30 ] パスとおせ
366 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 11:26:15 ] >>365 できました、ありがとうございます!
367 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 14:32:04 ] ポート番号のwell-known portというのはなぜ存在するのでしょうか? 65536種類もポート番号があるならば、最初からプログラムごとにバラバラの番号を指定しておけばよいような気がします。 HTTPは80などと標準を作ることによるメリットとはなんでしょうか?
368 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 14:48:37 ] >>367 例えば IE は 80 FireFox は 81 Netscape は 82 Lynx は 83 Opera は 84 みたいにしたほうがいいって思ってるの?
369 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 14:52:29 ] ISPによってはwell-known port以外のパケットはポートアタックと 見なして通さない所があるからだよ NNTPは119だっけ
370 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 16:16:25 ] >>368 いいというか、大量に番号がある中でわざわざバッティングするようなことをしなくてもと思ってました。 >>369 そういった守り(?)の理由があるのですね、勉強になりました、ありがとうございます。
371 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 17:46:09 ] ポート番号ってのは電波の周波数みたいなもんでな… 予めどれを使うのかわかってなければ通信を成り立たせる事も出来ないだろうが
372 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 18:07:15 ] もしかしてサーバー側とクライアント側の区別が付いてないんじゃない
373 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 20:11:37 ] double型の数値を0.0から1.0の範囲で安全性を確保した上でできるだけ小さい幅でインクリメントしたいと考えています。 double d = 0.0; for (...); { d += DBL_EPSILON; } みたいなコードはそれを保証してくれるのでしょうか? 演算の誤差判定にしか使えないのでしょうか?
374 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 20:24:39 ] >>373 等間隔でインクリメントということだよね? そのコードは規格上では多分何も保証してくれてないけど、 IEEE754準拠の環境上ならそれでOK。 まぁdoubleでそれやると4500京回以上ループ回るが。
375 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 20:34:50 ] >>374 52bit程度だからそんなに精度はないはず
376 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 20:44:07 ] 時間測定してみりゃいいじゃん 今時のCPUなら速いだろ
377 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 20:45:40 ] すぐに桁落ちして増えなくなるな
378 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 20:53:35 ] でも今のOSは簡単にループを止めれていいわ DOS時代はリセットしかなかったからなあ
379 名前:375 [2010/04/09(金) 20:56:59 ] >>375 おお、4500兆か。 億、兆、京と数えていたつもりだったんだが、万をすっかり忘れていた
380 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 20:57:19 ] 374ね。
381 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 21:17:14 ] >>374 [0.0 - 1.0] の間で常に d + DBL_EPSILON > d を満たせばいいということです。 できるみたいですね、ありがとうございます。
382 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 21:26:27 ] > d + DBL_EPSILON > d むりっしょ
383 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 21:30:26 ] その精度は本当に必要なのかまず考える 必要ないなら整数最大値で整数を割った値を使う
384 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 21:50:05 ] >>382 無理じゃねーだろ
385 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 22:14:58 ] DBL_EPSILONの精度が0附近ではあっても1附近でもあるかどうかが問題だな。
386 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 22:21:41 ] >>385 定義は 1.0+DBL_EPSILON > 1.0 が成り立つ最小の数値だから大丈夫
387 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 22:38:03 ] この程度が限界だな 1.0にしたらいつ終わるかわからん struct foo { __int64 start, end, freq; HANDLE hprocess; DWORD oldclass; foo() : hprocess(GetCurrentProcess()), oldclass(GetPriorityClass(hprocess)) { Sleep(10); // SetPriorityClass(hprocess, REALTIME_PRIORITY_CLASS); QueryPerformanceFrequency((LARGE_INTEGER*)&freq); QueryPerformanceCounter((LARGE_INTEGER*)&start); } ~foo() { QueryPerformanceCounter((LARGE_INTEGER*)&end); // SetPriorityClass(hprocess, oldclass); std::cout << (int)(end - start) << std::endl; } }; int main() { { std::cout << "test1 : "; foo f; double d = 0.0; while (true) { d += std::numeric_limits<double>::epsilon(); if (d > 1e-7) break; } } }
388 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 00:40:59 ] C++使ったアプリ設計能力ってどこで身につけるんだ
389 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 00:42:51 ] >>388 チーム開発の現場で。
390 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 10:24:51 ] VC++なんですが、自動でインデントを設定させる方法はどこで設定すればよいのでしょうか VBだとデフォルトでそうなっているので、同じようにしたいのです
391 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 13:53:28 ] 前提としてVC++2008Expressの話で、特に設定とかしてないけど、 普通に改行だけでちゃんと続きのインデントになってるぜ? VB(6/.NET)がどうなのかは知らないが
392 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 14:01:12 ] はい、VC++2008Expressです。自動的、といより強制的と言うべきでした VBで↓を入力すると、強制的にこの形になるんです。二行目にタブを余分に入れても、タブを消してもこの形に戻ります ある程度コードを書いてから、全体をifやforで括りたくなったときに威力絶大です そういった機能は無いでしょうか? Class tex Inherits TextBox Sub New() Text = 123 End Sub End Class
393 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 14:21:27 ] 無いと思う 範囲選択して Ctrl+K, Ctrl+F くらいしかできないな
394 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 14:28:30 ] ありがとうございましたー ショートカットキー使わせてもらいます
395 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 14:30:37 ] >>393 一気に生理できました!すごく見やすいです。感激です。
396 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 19:12:42 ] >>395 初潮迎えたのか
397 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 21:57:01 ] >>396 俺が思っても言わなかったことを・・・