いてつくブログ

2ちゃんねるのスレッドをコピペしてまとめてみるブログ

int

PC等【C++】高速化手法【SSE】

1 :デフォルトの名無しさん:2005/10/27(木) 02:55:36
C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。

178 :デフォルトの名無しさん:2009/01/07(水) 23:00:55
メモリ(バキューン!)とかを考慮すると構造体より配列のほうが高速?

179 :デフォルトの名無しさん:2009/01/08(木) 00:02:43
>>178
同じ。

185 :デフォルトの名無しさん:2009/01/09(金) 14:29:17
>>179
うほ?
>>178の意味がいまいち分からんが、
char array[0x100];

struct{char value;} array[0x100];
だったらレジスタサイズにパディングされる分、構造体の方が早くね?
ちなみに、同じ事だが容量気にして構造体のなかでshortとか使うと
パデイング入るんでメモリに無駄が発生する。
まぁ、パディングを知っていれば無駄を防ぐこともできるけど。

189 :デフォルトの名無しさん:2009/01/11(日) 01:50:19
>>185
> struct{char value;} array[0x100];
> だったらレジスタサイズにパディングされる分、構造体の方が早くね?

pragmaやattributeでパックしない限りpaddingは入らないだろ。

191 :,,・´∀`・,,)っ-●◎○:2009/01/11(日) 06:05:36
>>189
構造体やその配列の場合、パディングが入る。
デフォルトが4バイト単位だったかな?

360 :デフォルトの名無しさん:2009/09/08(火) 20:07:19
だんごじゃないけどi5はi5だよ。それ以上でもそれ以下でもない。

361 :デフォルトの名無しさん:2009/09/08(火) 20:13:34
>>360
おめーみたいなカスには聞いとらん失せろゴミが
ダンゴさんマダー?

363 :デフォルトの名無しさん:2009/09/08(火) 21:25:40
>>361
ちょwだれww
ほれ、なんかcore2の時とかこれはいいぜーとかなんか詳しく言ってたような気がしたから
i7なりi5なりのアーキテクチャ面からの意見を聞いてみたかったんだ

382 :デフォルトの名無しさん:2009/09/10(木) 00:35:11
おい!テーブル使わん言ったじゃねえかよ。氏ねカス。

387 :デフォルトの名無しさん:2009/10/08(木) 03:33:43
unsigned int mod6(unsigned int m){
unsigned int a = 0;
static unsigned int x[] = {0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4};
__asm{
mov eax, m
test eax, 1
jz Mod3
inc a
Mod3:
shr eax, 1
lea ebx, x
mov edx, eax
and eax, 0000ffffh
shr edx, 16
add eax, edx
mov edx, eax
and eax, 0000003fh
mov ecx, edx
and edx, 00000fffh
shr ecx, 12
shr edx, 6
add eax, ecx
add eax, edx
mov edx, eax
and eax, 0000000fh
shr edx, 4
add eax, edx
mov edx, x[eax*4]
add a, edx
}
return a;
}

399 :デフォルトの名無しさん:2009/10/08(木) 15:58:42
逆数乗算で商を求めて元の値から引いたほうが速い
今のCore MAでは整数乗算は浮動小数除算機と兼用してて
非除数 - (除数×小数点以下切り捨てた商)

まあベンチ取ってみればわかるがコンパイラの吐くコードにも勝てんと思う

401 :デフォルトの名無しさん:2009/10/08(木) 17:45:39
static??const??int??rcp6??=??1.0??/??6.0??*??std::pow(2.0,16.0);
int??x??=??255??-??((255??*??rcp6)??>>??16)??*??6;

確かにこれで十分な気がするし、>>387より速そうだ。


414 :デフォルトの名無しさん:2009/10/09(金) 01:24:41
>>387
inline unsigned int mod6(unsigned int a){
 unsinged int b = (a >> 3) + (a >> 5); // /6
 unsinged int c = (b << 1) + (b << 2); // *6
 return a - c;
}

456 :デフォルトの名無しさん:2009/10/22(木) 03:07:47
C/C++でメモリプール(int, doubleなど様々な型が共存)を作り、
メモリプール内部でメモリの詰め直しを行って最適化しようと試みています。

入門書+α(boostがわかるぐらい)なので、
キャッシュやメモリに関する特殊なことは全然わかりません。
何か気をつけなければならないことや忠告があれば教えてください。

488 :,,・´∀`・,,)っ-○○○:2009/10/28(水) 04:46:10
for (i = 0; i < N; i+=4) {
  sum1 += A[i];
  sum2 += A[i+1];
  sum3 += A[i+2];
  sum4 += A[i+3];
}
sum = sum1 + sum2 + sum3 + sum4;

っていうか組み込み関数使えよ

498 :デフォルトの名無しさん:2009/10/29(木) 08:44:26
>>488
これってNがわかっていないとコンパイラはやってくれないよね?
ICCだと出来るのかな?
GCCではベクトル化してくれなかった。

539 :デフォルトの名無しさん:2011/01/28(金) 11:43:56
x86は浮動小数点が弱くて仕方がないからなあ
8087のコプロセッサの頃からの負の遺産を引きずっている
でもL1/大容量L2キャッシュを媒介にする事によって相当克服して来てはいるんだけどな
PowerPCなどにどうしても勝てない

596 :デフォルトの名無しさん:2011/05/30(月) 10:20:14.97
結論から言うとメモリの転送がボトルネックです。
書き出しのアライメントを揃える事とstreamを使う事で何割かは改善出来ますが、基本的に速く出来ません。

最適化とは遅い部分を探し出す事に他なりません。
安直にSSEとかマルチプロセッサにしようと思わず、真にボトルネックを見つけられるようになりましょう。

真に遅い部分が分かったなら、平均化フィルタと何が違うのか、どうしてもう速く出来ないのかが理解出来るようになります。

598 :デフォルトの名無しさん:2011/06/13(月) 15:11:06.75
>>596
メモリの転送がボトルネックなのか、演算部分がボトルネックなのかは
どうやって判断すればいいのですか?つまりどこを見たらよいのか。
あるいはあなたはどうやってますか?
ツールとか使うのでしょうか?

618 :デフォルトの名無しさん:2011/07/02(土) 22:44:49.03
mapの方がアライメントされてないんじゃない?

619 :デフォルトの名無しさん:2011/07/02(土) 23:38:54.68
std::pair<int, hoge>からaligned_stl::pair<int, hoge>へのコードがバグってるんじゃないの

620 :618:2011/07/03(日) 00:21:26.44
適当な事書いたと思ったけど、std::mapにカスタムアロケータでいけるっぽい
http://ideone.com/sOWl6



621 :デフォルトの名無しさん:2011/07/03(日) 02:45:36.94
>>618
mapの方は、__declspec(align(16))みたいなことはしてませんが
カスタムアロケータを渡しており、カスタムのpair(aligned_stl::pair)を使うように指定してます。

>>619
わかりづらくてすみませんorz
std::pairは一切使っておらず、aligned_stl::pairのみです。
make_pairもaligned_stl::pairを返します。

>>620
ありがとうございます、Win7 64bitのVC2008Expressで動かしてみましたが
カスタムアロケータのc.insertで、Hoge()の引数なしのコンストラクタで落ちます(x_ = static_x)
Hoge hoge;
c.insert( ::std::make_pair<int,Hoge>(i, hoge) );
とやると、make_pairのところのコピーコンストラクタで落ちます( x_ = src.x_)。
なので、前回書いたのと同様に
Hoge hoge;
std::pair<int, Hoge> pairArg(i, hoge);
とやってからpairArgを渡すと落ちませんでした(c.insertのみ。d.insertは落ちる)。

どうもpairに関してはアラインメント指定しなくても、中のメンバが
アラインメント指定されていれば問題ないようですね(アロケータだけでよい?)。
もうちょっと試してまた報告します。
ただ、2008だとアラインメント指定が一時オブジェクトに対して効かないと考えたほうが
いいのかもしれませんね(´・ω:;.:...  (インライン展開された場合は除く)
ありがとうございました。

638 :デフォルトの名無しさん:2011/07/05(火) 22:56:13.54
余分なカッコが多すぎるコードってみにくくて嫌いだ。

if (a == 0 && b == 0 || c == 0 && d == 0)

if ((((a == 0) && (b == 0)) || ((c == 0) && (d == 0))))

この二つだと上の方がはるかに見やすいと個人的には思うが、
見やすさを優先してカッコをつけるとか言って下のように書く人がいる。


649 :デフォルトの名無しさん:2011/10/10(月) 19:26:30.72
指定桁数で四捨五入する以下の関数の実行速度を上げたいの。
(valueは0~9999、digitsは0~5が保証される)
SSE使って高速化頼む。

double NormalizeDouble(double value, int digits) {
  static double t0[] = { 1, 10, 100, 1000, 10000, 100000 };
  static double t1[] = { 1, 0.1, 0.01, 0.001, 0.0001, 0.00001 };
  return (int)(value * t0[digits] + 0.5) * t1[digits];
}

652 :デフォルトの名無しさん:2011/10/10(月) 19:49:57.12
>>649
最適化スレで終了宣言してからにしろよ

653 :デフォルトの名無しさん:2011/10/10(月) 19:50:50.26
でもベクトル化で少しは早くなるわよ

664 :デフォルトの名無しさん:2011/12/17(土) 22:41:12.80
signed shortの配列に
floatもしくはdouble型の乗算をして
クリップ処理をほどこし
signed shortの配列に戻すのを
SSEにしたいのでやってください


これ

signed short s[100];
float f
init a;

for (a=0;a<100;a++)
s = s[a] * f;

665 :デフォルトの名無しさん:2011/12/17(土) 23:06:34.33
それ、どう考えても実数型⇔整数型のコストがでかすぎる。
たった100件でいいなら実数で持てないの?

679 :デフォルトの名無しさん:2011/12/19(月) 02:15:44.43
初めてSSEに触れるので、まずは簡単なコードを作成してみたのですが、
SSEを使わないほうが40倍も速いという驚愕の結果が出ました。
何が間違っているんでしょうか??

コンパイラ:VC++2005(Releaseモード、浮動小数点モデル:FAST)

float* f4pakAdd( float* pfA, float* pfB )
{
  _declspec( align( 16 ) ) static float fC[ 4 ];
  
  _asm
  {
    mov ebx, pfA
    movaps xmm0, oword ptr [ebx]
    mov ebx, pfB
    movaps xmm1, oword ptr [ebx]
    addps xmm0, xmm1
    movaps fC, xmm0
  }
  
  return fC;
}

呼び出し側

for( int i = 0; i < 10000000; i++ )
{
  pfC = f4pakAdd( fA, fB );
}

682 :デフォルトの名無しさん:2011/12/19(月) 02:34:54.14
パイプライン化したコードでもないし、スタックチェックが行われている気がするが。
逆アセ確認したかい?

707 :デフォルトの名無しさん:2011/12/23(金) 11:26:47.88
どんな変数も問答無用でアライメント16にするようにコンパイルする設定があれば
面倒な記述を減らせると思うんですが、何かデメリットあるんでしょうか?
メモリの隙間ができて勿体無いとかあるかもしれませんが、メモリ量の多い昨今、
それほど問題にならないのでは?と思います。
むしろアライメントすることでメモリアクセスの冗長さを減らせて帯域を節約する効果も
あって一石二鳥ではと思うんです。

708 :デフォルトの名無しさん:2011/12/23(金) 11:59:03.43
gccだと-mpreferred-stack-boundary=4がデフォルトだから既に16バイトアライメントだよ
構造体の詰め物は互換性もあるし難しいじゃないか

710 :,, ・´ ∀ `・ ,,)っ-○○○:2011/12/23(金) 12:41:37.02
>>707
なにそれ君いまだにPS3向けのゲームとか組まされてるわけ?

711 :デフォルトの名無しさん:2011/12/23(金) 15:57:24.48
>>708
glibcのmallocは8バイトだよ

>>710
SandyBridgeでもアラインメント取れてないと遅いでしょ

713 :デフォルトの名無しさん:2011/12/23(金) 17:19:17.60
>>711
Nehalem以降はmovups/dquもペナルティ無く使えるでしょ
まあ結局Core2以前も考慮するとコード振り分けるから労力は変わらないのだけれど...

714 :707:2011/12/24(土) 02:12:26.59
すみません、自分は日曜プログラマレベルで、対象CPUはx86、環境はVC++です。
VC++の設定を見ていると、「構造体メンバのアライメント」というのがあって16バイトアライメントを選べるようになってました。
同様に通常の変数もアライメントできる設定があるかと思い探しましたが見付かりませんでした。

715 :デフォルトの名無しさん:2011/12/24(土) 02:18:17.32
どう考えてもこれ以上削れないってくらいの手書きインラインアセンブリコードに対し、
C記述版をVC++のReleaseモード(最適化O2)でコンパイルしたもののほうが1.3倍速かったです。
生成されたアセンブリを覗いてみたところ、

変数 * 3

というコードを

lea edx, DWORD PTR [eax+eax*2]

としていてびっくりしました。
これって、アドレス演算を行うローダ(専用の演算器?)を使うことで、
通常のALUと並行して演算(スーパースカラって言うんでしたっけ?)し
高速化しているということなんでしょうか??

716 :デフォルトの名無しさん:2011/12/24(土) 02:34:46.72
>>714
__declspec(align(N))

717 :707:2011/12/24(土) 02:44:05.59
>>716
ありがとうございます。
それは知っているんですが、>>707でも書いた通り、
そういった記述をわざわざせずとも、自動で全てアライメントしてくれるような設定があればイイのでは?
と思った次第です。

しかし、上でも仰られたように、互換性の問題があったりで難しいのでしょうね・・・
でも二重インクルード防止の「#pragma once」のように、互換性を考慮しない機能があったりするくらいですから、
自分のようにずっとVC++しか使わない人間を対象にそういうオプションが用意されていても良いのではと思いました。

733 :デフォルトの名無しさん:2012/03/09(金) 12:53:25.77
unsigned int maxpos(unsigned int src[256])
{
unsigned int i, m = 0;
for(i = 1; i < 256; i++)if(src[m] < src[i])m = i;
return m;
}
これをSSEで高速化する方法があれば教えて下さい

739 :デフォルトの名無しさん:2012/03/11(日) 00:41:15.69
>>733
画像とか統計の基礎だな。疑似コードで書くとこんな感じだ

maxpos(src[256]) {
pos = {0, 1, 2, 3};
for(i=0; i<256; i+=4) {
 s=load(&src[i]);
 isGT=maxVal<s;
 maxVal=isGT&s | ~isGT&maxVal;
 maxPos=isGT&pos | ~isGT&maxPos;
 pos += 4;
}
return max_position(
 maxVal[0], maxPos[0],
 maxVal[1], maxPos[1],
 maxVal[2], maxPos[2],
 maxVal[3], maxPos[3]);
}

762 :,, ・´ ∀ `・ ,,)っ-○○○:2012/03/14(水) 07:23:58.09
packed unsigned intの比較(マスク生成)だけど、両項のMSBを反転してからpcmpgtdするより
psubd + psradのほうが速いかもしれない

768 :デフォルトの名無しさん:2012/03/21(水) 23:53:20.16
P6,P2,P3,P4はforwardならnot taken backwardならtakenがデフォルト
P4はPrefixでヒントを出せる
PM,Core2はランダム
ソースはAgner

775 :デフォルトの名無しさん:2012/03/24(土) 21:41:50.71
そう思ってくれるのはいいが、間違いの指摘と
実際はどうなってんのか答えてくれ
批難だけの回答はいらん。

778 :デフォルトの名無しさん:2012/03/24(土) 21:52:06.49
>>775
じゃあ間違いを指摘してやる。

>大概returnやthrowが行われるからifをすっ飛ばせば速いのは解る。
前方への条件分岐は、「分岐しない」と予測される、とオマエ以外の全員が言っている。
if (xx) return
で「すっ飛ばせば云々」なんて、理解していないまま「わかったつもりになってるだけ」の証拠。

>今のCPUは分岐ヒントとか投棄とかあって単純じゃないんだろ
ヒントはともかく、投機はまさに「投機実行するために分岐予測をする」のであって
「投機実行もあるから分岐予測が複雑になる」はナンセンス。
もちろん、エンプラ系/VLIW系では「分岐の有無の両経路を実行する」なんてのもある(らしい)が
一般的とは言いがたい。

779 :デフォルトの名無しさん:2012/03/24(土) 21:59:34.64
>>778
内容じゃなく国語的に誤解されてるな。

>前方への条件分岐は、「分岐しない」と予測される、とオマエ以外の全員が言っている。
if( xx ) throw xxx;
throwなんて実行するケース殆ど無いんだから基本if実行しないってのは同じ話。
矛盾してないでしょ。

まず分岐予測が複雑になってるって話はしてないよ。
投棄実行については投棄実行を考慮した上での静的予測方法があるでしょという話。

780 :デフォルトの名無しさん:2012/03/24(土) 22:04:11.41
>>779
だから、ifの内部は「実行すると予測される」んだよ、バーカ

782 :デフォルトの名無しさん:2012/03/24(土) 22:06:41.25
せめて正しい漢字使えよ。

一度なら単なる変換ミスとして納得できるけど
繰り返しているってことは、別の意味に捉えているとしか思えない。

783 :デフォルトの名無しさん:2012/03/24(土) 22:09:32.88
>>780
お前バカだろ
みんなアセンブリ前提で言ってんだよ

jze label   if() {
・・・処理・・・
labeli     }


789 :デフォルトの名無しさん:2012/03/24(土) 22:48:33.55
投棄実行については誤解してたわ。
2つの分岐を両方実行して実際実行対象にならなかった方の結果を破棄するものだと思ってた。

792 :デフォルトの名無しさん:2012/03/24(土) 23:01:04.27
一応。

突然returnやthrowが出てくるのが
if (xx) return
という意味じゃないか、というのも勝手に俺が頭の中で補って想像しただけで
実際には何の説明も無く(ifの多くがreturnやthrowというのにも同意しにくい)
唐突な「rerturnやthrow」「すっ飛ばす」を必死に理解しようとしたのがそもそもの間違いかもね。

794 :デフォルトの名無しさん:2012/03/24(土) 23:04:39.09
>>792
>>779で補足だしてるだろしつこいわ

803 :デフォルトの名無しさん:2012/03/25(日) 16:12:43.94
インテルの最適化マニュアルだと
>インテルPentiumM??プロセッサー、インテルCoreSolo??プロセッサー、インテルCoreDuoプロセッサーは、
>ジャンプの向きに従った条件分岐を静的には予測しない。これらのプロセッサーでは、
>すべての条件分岐は、最初に発生したときでも動的に予測される。
と書いてあって、wikiで調べたらPenM以降は広域分岐予測を取り入れた関係で静的予測はしなくなったみたいだね
http://ja.wikipedia.org/wiki/%E5%88%86%E5%B2%90%E4%BA%88%E6%B8%AC

>>768
>PM,Core2はランダム
というよりも、「前に実行した別の分岐命令の結果も影響する」とした方が適切みたいだ

分岐予測に関して
http://news.mynavi.jp/column/architecture/index.html
の第167回からの解説が参考になるよ



http://toro.2ch.net/test/read.cgi/tech/1130349336/l50/../人気ブログランキングへ

PC等ポインタを難しいと言う奴が理解できない

1 :デフォルトの名無しさん:2008/07/27(日) 10:47:14
int i = 10;
int * p = &i;//int型ポインタpにiのアドレスを代入する
簡単。
char str1[] = "abcde";
char * str2 = "abcde";
上と下は同じでどっちを使ってもいい。

6 :デフォルトの名無しさん:2008/07/27(日) 11:25:57
* を両方から離して書くのは
かけ算と紛らわしいので嫌い

230 :デフォルトの名無しさん:2008/10/04(土) 12:01:50
char str1[] = "abcde";
char * str2 = "abcde";
>上と下は同じでどっちを使ってもいい。

これは間違い。str1は書き込みできるが、str2は書き込みができないことがある。


231 :デフォルトの名無しさん:2008/10/04(土) 12:19:38
>>230
どっちも書き込めないときがあるだろ。
パソコン上ではどちらも書き込めるが、
ROM化環境などではどちらも固定される事がある。

これらの最大の違いは、sizeof(); で返される値。

char str1[] = "abcde";
char * str2 = "abcde";

printf("%d�\n",sizeof(str1));
printf("%d�\n",sizeof(str2));
やってみそ


239 :デフォルトの名無しさん:2008/10/04(土) 13:18:31
char s[] = "abcde";

ポインタ経由だと、これに書き込めない環境があるってこと?
ないだろ。

246 :デフォルトの名無しさん:2008/10/04(土) 13:44:29
知ったかでしゃべってるのを「分野の違い」にすんなよ。
>>239 が、ポインタ経由だと書き込めないってどんな処理系だよ。

247 :デフォルトの名無しさん:2008/10/04(土) 13:50:24
>>246
だからさ、世の中には色んなコンパイラがあって、色んな環境で色んなCPUが色んな場所で動いてるわけよ。
その全部のローカルな俺様コンパイラ的な物では定数は全部固定データなワケよ。
特に初期化宣言以降どこに右辺に現れない変数も固定な訳よ。 わかる?

249 :デフォルトの名無しさん:2008/10/04(土) 13:55:33
>>247
定数を書き込み禁止領域に置くコンパイラってこと?
それごく普通のコンパイラじゃん
文字列リテラルを書き換えようとして落ちるのはANSI仕様上も問題ない

知ったか乙

253 :デフォルトの名無しさん:2008/10/04(土) 13:59:13
>>249
だからさ、

char t[] = "abc";
t[0] = "0";

とかあれば、このtは書き換え出来る領域に"abc"をコピーしてくるけど、

char t[] = "abc";
char *p;
p = &t[1];
*p = "0";

とかすると、落ちるとか普通にある訳よ。


259 :デフォルトの名無しさん:2008/10/04(土) 16:33:17
>>231
> パソコン上ではどちらも書き込めるが、
> ROM化環境などではどちらも固定される事がある。
知ったか乙
汎用OS下でも処理系によって違うんだよ。
そもそもANSI読んだのか?

318 :デフォルトの名無しさん:2009/02/04(水) 11:04:42
ポインタの記号ってドルマークの方が良かったと思う
アスタリスクだと掛け算とごっちゃになるから嫌いなんだよ

320 :デフォルトの名無しさん:2009/02/04(水) 14:20:23
a*=b と a=*b とか
a**b とかじゃないの?

323 :デフォルトの名無しさん:2009/02/05(木) 08:40:05
>>318
>>6

>>320
大昔のHP-Cで =* という独自拡張された演算子
(*= と同じなんだけど、式の値は演算“前”の左辺) があって
a=*b なんて書くと「ambiguous だぜ。演算子の後ろに空白入れな。」
という警告をくらったのを思い出した。
bがポインタかどうかで判断つくだろうに。
つか、誰が得するんだあの拡張。

326 :デフォルトの名無しさん:2009/02/05(木) 13:42:15
> > =* の類は「独自拡張」じゃないぞ。
> mjsk
こんなことも知らん割には、ずいぶん上から目線だな。

362 :デフォルトの名無しさん:2009/09/01(火) 02:43:45
超初心者の質問ですが、いいですか?

int v,*po;

po=&v;

*po=300;

のように、ポインタ変数poが指す内容は変数vのアドレスである、ということですが、

char *jk;

jk="jyosikousei";


のように、ポインタの中に文字列を直接入れられるのはどうしてですか?

この場合、ポインタ変数jkは'j'の文字が格納されているアドレスを指しているということでしょうが、なぜそこに文字列"jyosikousei"を直接代入できるんですか?




406 :デフォルトの名無しさん:2010/01/24(日) 17:31:42
そもそも配列概念の実装がポインタ演算なんだから

510 :デフォルトの名無しさん:2011/06/08(水) 20:26:32.43
ポインタがマジでわかりません。

int * const (*(*funcsMap[FUNCS])())(int * const (*)());

はがしたいのでしょうか?

526 :デフォルトの名無しさん:2011/06/10(金) 22:11:06.55
int *p;
p= (int*)malloc(80);

として、

pp[1][2] = 2;

とできるには、ppをどの様に宣言すればいいですか?

582 :デフォルトの名無しさん:2011/08/28(日) 13:06:04.38
大体何でぇ、変数の名前で指定すれば事足りる物をわざわざアドレスを取り出して
それを指定するのか、そこが分らん。

確かに世の中氏名と出席番号有るのは分かるんだが、それがプログラムの世界で
なんで必要なのかがわからんのよ

587 :デフォルトの名無しさん:2011/08/31(水) 10:31:12.12
int *p = 0;
*p = 0;

この違いを理解できずに打ちのめされる初心者カワイソス

655 :デフォルトの名無しさん:2012/02/16(木) 18:16:31.69
「JavaやC#にはポインタが無い」(※JNIやunsafe除く)
って言葉だけだとちゃんと分かってるのか判断出来ないよな

「参照はあるけどCのようなポインタは無い」とか
「ポインタ演算は無い」のような表現なら分かるけど

656 :デフォルトの名無しさん:2012/02/16(木) 19:48:27.25
>>655
>「参照はあるけどCのようなポインタは無い」
言語ごとに「ポインタ」の定義が違うことを
ちゃんと分かってるのか判断出来ないよな??

687 :デフォルトの名無しさん:2012/02/25(土) 12:49:27.76
int a = 1234
だとして、
&a とすれば、1234が記録されてるメモリー番地(たとえば4567等)が読み取れる。

&記号は 通常の変数に対して使えるのだから、*記号も同様に使えればシンプルで良かった。
*a とすれば、メモリー番地1234に(バキューン!)できる。これで十分じゃないか?
しかし実際はエラーになる。
通常の変数に * は使えない。



ポインター変数である int* a も、結局、実体はただの4byte長の数字を格納してる変数にすぎない。
通常の変数との違いは
適用できる記号が &(記録に使われてるメモリー位置を得る) だけの通常変数と、
&以外に *(記録されてる数字の、メモリー位置から読み書きする)も使えるポインタ変数。この違いだけ。

通常変数も、ポインター変数も無関係で、何にでも & と * を使えるようにすればシンプルで良かった。アセンブラの場合はこれ。
「アセンブラから始めればポインタを理解しやすい」と言われる理由はここにある。

689 :デフォルトの名無しさん:2012/02/25(土) 14:16:08.68
そもそも通常変数とポインタ変数と言う区別をしているからいけない。
その、ポインタ変数と言う代物は只単にポインタ型の変数でしかない。
つまりそれは、通常変数と言う代物と型が違うだけの同じものだ。

690 :デフォルトの名無しさん:2012/02/25(土) 14:18:44.29
>>689
ポインタを実際に使ってない人のコメントにしか見えない

706 :デフォルトの名無しさん:2012/02/25(土) 19:55:21.07
#include <stdio.h>

static void function(int a)
{
printf("my_function: %d\n", a);
}

static void caller(void (*new_function)(int a), int p)
{
(*new_function)(p);
}

int main(void)
{
caller(function, 10);
return 0;
}


708 :デフォルトの名無しさん:2012/02/25(土) 21:14:14.64
>>706
>static void caller(void (*new_function)(int a), int p)
これをプロトタイプ宣言すると
static void caller(void(*)(int), int);
となるわけで、初学者には恐怖感あるだろうな。

731 :デフォルトの名無しさん:2012/03/05(月) 00:30:34.32
Javaの意味での参照では不十分で、Cの意味でのポインタが必要なのはどんなとき?
外部関数呼び出しインターフェースをつくるときくらいしか思いつかない。


752 :デフォルトの名無しさん:2012/03/08(木) 05:59:12.20
DataGridViewでクラスのメンバ変数一覧みたいなのを作って
変数とセル内容を対応させるみたいなの作るときにポインタないと辛い
クラスは参照でいけんだけどint bool floatとか値型?のもんってポインタないから氏ねる

754 :デフォルトの名無しさん:2012/03/08(木) 10:45:05.68
>>752
グリッドとかでメンバ変数への直接の参照を保持することって無くない?
http://ideone.com/hhkJX

それとも行エントリ自体が値型ってこと?

755 :デフォルトの名無しさん:2012/03/08(木) 12:12:36.09
上で出てきた人だよね? まだそんなことやってんの?
さすがにポインタ以前の理解力の問題なんじゃないか
上で言われてるようにリフレクション使えば何の苦もないし
値型もObjectに入るはずだけど何が問題なのかわからない

756 :デフォルトの名無しさん:2012/03/08(木) 12:18:38.54
もしかして*(cells[1,2])=4;みたいな感じでメンバ変数を更新したいってこと?
そんなことしなくても変数名分かってんだからリフレクションで書き換えればいいだろ

757 :デフォルトの名無しさん:2012/03/08(木) 23:37:08.86
>>755
>上で言われてるようにリフレクション使えば何の苦もないし
なんの苦もなくは嘘だろ
すげー大変だった
これだったら絶対ポインタあったほうがいいよ
配列かどうかまで判断しないといけないとこも氏ねる
実行時型情報はあくまで型だけでインスタンスを特定できるもんじゃないんだよね
つまり、特定するにはどこどこのだれだれの~って上からたどってこないと氏ねる

>>756
ちげーよ
DataGridViewで特定の変数にアクセスしたいって言ってるのになんで別の例を出すんだ
変数名わかってもどこのインスタンスの(配列のN番目という可能性もあり)どのメンバのなかのこのメンバの12番目の要素
とかいうとこまでとってこないといけなくて面倒だろうが
ポインタだったら格納時にアドレスだけ保持って「ハイ、終了」だろが

758 :デフォルトの名無しさん:2012/03/09(金) 00:16:46.63
>>757
ポインタだったら簡単とか言ってるけど
そのポインタの型情報はどのように取得するの?
泥臭く手書きで網羅するの?
デバッグ情報として埋め込むの?
int*とか決め打ち?

リフレクションがどういうものなのか
理解出来ていないのでは?

759 :デフォルトの名無しさん:2012/03/09(金) 00:22:48.79
>>758
リストにこっそり入れときゃいいじゃん
Visible falseで

リフレクションだと俺がやった感じだとあくまで型しか取得できなくて
ポインタっぽいことはできない感じだったな
できる方法があったら教えてくれ
配列なのかそうじゃないのかとか判別して・・・ってやるのすごく面倒だったんだ

760 :デフォルトの名無しさん:2012/03/09(金) 00:38:07.85
>>759
>リストにこっそり入れときゃいいじゃん
めんどくせぇよw
てか、用途が分からん例えでイメージしづらい

> 配列なのかそうじゃないのかとか判別して・・・ってやるのすごく面倒だったんだ
ポインタでも同じでしょ
てか、配列をポインタで管理すると
型情報の他にもしくはNULL終端縛りかlengthまで必要になるよね

761 :デフォルトの名無しさん:2012/03/09(金) 01:20:35.81
>>760
同じじゃないって
リフレクションが持ってるのは型だけなんだって
馬鹿でもわかるように説明すると

void* p = &unko[12];

こういう情報をとれない

>てか、配列をポインタで管理すると
そんな話してない
DataGridViewのセル1つが変数1つに対応してる形だ
こっちが挙げてる例からなんで脱線するようなことをいうんだ
お前、ツカエネー奴だろ
会議でいっつも関係ないことを発言しだす不思議ちゃんだろ
正直、邪魔だからw

764 :デフォルトの名無しさん:2012/03/09(金) 02:31:06.14
>>761
> リフレクションが持ってるのは型だけなんだって
void*で受けたら型すら分からんですよ
型が分かれば十分じゃない?他に何が必要なの?

> void* p = &unko[12];
> こういう情報をとれない
即値な理由もunkoの型も使い所もpの寿命も…
何が言いたいのか分かんない

> >てか、配列をポインタで管理すると
> そんな話してない
>> 配列なのかそうじゃないのかとか判別して・・・ってやるのすごく面倒だったんだ
してるじゃん

> DataGridViewのセル1つが変数1つに対応してる形だ
言ってる意味は分かるよ
型が決め打ちってことはないだろうから
デバッガのGUIフロントエンドにありがちのtreelistではなく
tree + listのツーペインのlist部分みたいな位置づけでしょ?

で、リフレクションありとなしでは手間が違うって言ってるの
バインドや取得
どう考えてもめんどくさいよ

766 :デフォルトの名無しさん:2012/03/09(金) 06:25:18.09
>>764
超馬鹿だなお前
わかりやすい例出してやったのに
型がわかってもunkoの12番目っていう12番目ってところを保存できねーだろが
本当にカスだなお前

ってか、お前がリフレクション使ってなんにもやったことがないのはわかった

767 :デフォルトの名無しさん:2012/03/09(金) 08:56:18.85
>>766
>>754のソースじゃ駄目なの?

あとこういうのは?
http://ideone.com/nrlQw

772 :デフォルトの名無しさん:2012/03/10(土) 01:14:26.00
>>767-768
お前、人の話聞く気ないならわざわざクビ突っ込まないほうがいいぞ

776 :767:2012/03/10(土) 18:32:08.71
>>761
>リフレクションが持ってるのは型だけなんだって
型だけでなくどのクラスのどのメンバって情報持ってるよ

>void* p = &unko[12];
>こういう情報をとれない
ICell c = Bind(et.na, 12); で情報を保存出来てるよ
配列でないメンバも同様
ICell c = Bind(et, "n");
構文は関係無いよね?

>>764
>unkoの12番目っていう12番目ってところを保存できねーだろが
同上

>>772
認識は上に書いた通りなんだけど
出来れば具体的に指摘して欲しい

777 :デフォルトの名無しさん:2012/03/10(土) 19:16:42.40
>>776
え?そんな特定の型限定のソース出されて言われても困るんだけど

788 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 17:46:26.00
変数を指す変数があれば便利な場合がある
そんだけ
配列とかと同じ

789 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 17:50:24.84
必要性とかわりとすぐピンときたけどなw
関数に配列の先頭アドレス渡すのって合理的じゃね?
変数のサイズ、構造体のサイズってのを理解している段階であれば分かるはず。

792 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 00:53:28.26
BMPみたいな数MB単位の巨大配列とかいじるとき、ポインタなしだとやってられんでしょ
動画だったらこれをさらに数十枚分キャッシュとかが普通なわけで
まあ、せいぜい数KB程度の配列や構造体しか扱ったことのない者には、なかなかありがたみはわからんかもね

797 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 12:16:00.08
>>788
>>789
>>792
おまえらが言ってるのはただの「参照」。
そんなのはjavaやその他の言語にもある。
ていうか配列を丸ごとコピーする実装の言語なんてたぶん無いw
ポインタが難しいのはそこじゃないことを判りもしないで恥ずかしいレスすんな。

799 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 08:24:48.19
教えて欲しいなら憎まれ口叩くより素直に教えてくださいって言った方が得だよ

808 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 12:28:21.19
>>799
ポインタのどこが難しいのかどうか教えて下さい。お願いします

スレタイ同様、私には「ポインタを難しいと言う奴が理解できない」ので

811 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 08:48:18.31
>>808
断片的に何度か書いているが、もっかいまとめてみる。
まず参照だ。コードの例で示してみる。
void func_a() {
OBJ a = new OBJ[10000]; //でっかい配列
func_b(a); //関数内では参照している
//なんかの処理
//ここでaは不要になるので、コンパイラは自動的に解放処理を呼び出す
}
void func_b(OBJ b) {
//なんかの処理
//ここでbは不要になるので、コンパイラは自動的に解放処理を呼び出す
}
こんなコードがあったとする。func_bにはaの参照を渡している。
ここで大事なのはaとbの解放タイミングがわからない点だ。どちらかの処理が済んでないのに、もう片方を解放したら落ちてしまう。
さて、参照とポインタの違いは「参照ならポインタ以外のワークも共有できる」という点だ。この場合ならbに渡す時に、「この変数は2箇所で使われている」という情報を書き込むことが出来る。
それにより、aおよびbの解放時に、じかに解放するのでなく、「使われている回数を1引き、0になったら解放する」という処理に変えることで、安全に解放処理を呼び出すことができる。

ポインタではそうはいかない。func_bに渡されるのはaかもしれないし、&a[1]かもしれない。するとワークは渡せないので、もちろんfunc_bで解放することはできない。すると解放処理をプログラマにやらせるしかない。
だからfree関数が用意されている。しかし上記のケースでは、func_aがfunc_bより先に終わるかもしれないから、安易にfunc_aの末尾でfree(a)などとやったら落ちてしまう。これがポインタの難しいところだ。

821 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 12:38:38.24
811の翻訳(エスパー)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>

void* f(void* a) {
sleep(1);
printf("%d\n", *((int*)a));
}

g() {
int* a = malloc(sizeof(*a));
*a = 123;

pthread_attr_t pta;
pthread_attr_init(&pta);
pthread_attr_setdetachstate(&pta, PTHREAD_CREATE_DETACHED);

pthread_t pt;
pthread_create(&pt, &pta, f, (void*)a);

free(a);
}

main() {
g();
sleep(2);
}


http://toro.2ch.net/test/read.cgi/tech/1217123234/l50/../人気ブログランキングへ

PC等強いAI(人工知能)ver0.0.1

1 :デフォルトの名無しさん:2010/11/22(月) 17:52:42
派生元スレ。
>人工知能を作ろうver0.0.7
>http://hibari.2ch.net/test/read.cgi/tech/1290361924/
もとスレは弱いAIとし、

こちらのスレはで強いAIの話題とします。

>強いAIと弱いAIについて。
>http://ja.wikipedia.org/wiki/%E5%BC%B7%E3%81%84AI%E3%81%A8%E5%BC%B1%E3%81%84AI

弱いAIの原理を主張する人はこちらには来ないでください。
逆に強いAIの原理を主張する人は派生元スレで発言しないでください。

128 :片山博文MZ:2011/06/13(月) 12:35:37.41
記憶場所を特定する仕組みがなければ、記憶の呼び戻しができない。
しかし、人の脳は対応する記憶を引き出すことができる。矛盾。
∴記憶場所を特定する仕組みが存在する。それがスーパーアドレス。

131 :デフォルトの名無しさん:2011/06/13(月) 23:15:13.01
>>128
場の記憶って知っている?、特定の場所に特定の現象が何故か連続する
理屈では説明できない類。

200 :片山博文MZ:2011/06/29(水) 13:43:14.06
ガンダムSAGE!
まず、時間が許せば脳細胞は有限個なので全ての脳細胞に
アドレスを付けることができる。当然だが、複数の細胞にも
アドレスが付けられる。神経から脳への特定の刺激に対して、
信号が伝わっていく(グラフ論でいうところの)パスと
アドレスが形而上、決定付けられる。

224 :asis:2011/06/30(木) 19:36:46.25
>>200-201
http://volga.esys.tsukuba.ac.jp/~mor/text1/text.html

242 :片山博文MZ:2011/07/03(日) 11:27:52.01
cur_pos = get_cur_pos(); //GPSと通信して現在位置を得る
dest_pos = get_dest_pos(); //入力したデータから目的地を得る
best_way = get_best_way(cur_pos, dest_pos); // 最良の道を計算する
drive(best_way); // 運転する

243 :デフォルトの名無しさん:2011/07/03(日) 11:33:29.19
アナログ的なものをデジタルで表現すればどうなると思う?
数値でいえば小数点以下を精密に極限に明確にしてゆく作業だ。

誤差が分からないほど近似すればいいという考えならばそれで充分実現する。
たとえば円周率を数字で表すとしたら?3か?3.14か?もっと深い桁数
まで表現するか?
桁を深く明確にするほど指数的にそれは困難になることは理解できるだろう。
強いAIはデジタル的なものかアナログ的なものか、それは貴方が考えることである。
アナログ的なものは実に不明確で抽象的で曖昧な類かもしれない。
どんどん進化するコンピュータの歴史を見よう、そこでハードウエアは爆発的に
高度に進化している、ソフトウエアはどうだろう3から3.14となり、
人が捉えることが可能な常識的な円周率は?
π = 3.14159 26535 89793 23846 26433 83279 50288 …
この程度の領域である。
貴方が思う手法が出す結果の【質】を思もい浮かべ予測してみろ。
それが明確化で得る結果の限界点である。どんな想像をしたかはしらんけどな。

244 :デフォルトの名無しさん:2011/07/03(日) 11:36:27.22
誰のどの発言について言ってるのだろうか

245 :デフォルトの名無しさん:2011/07/03(日) 11:37:32.80
>>242
>cur_pos = get_cur_pos(); //GPSと通信して現在位置を得る
>dest_pos = get_dest_pos(); //入力したデータから目的地を得る
>best_way = get_best_way(cur_pos, dest_pos); // 最良の道を計算する
なるほど

>drive(best_way); // 運転する
どういう理由で運転(行動)する結果になる?
何故に人工知能が結果を目指すか、貴方にはそれが足りない。
貴方が与える道具ならば、主人の奴隷だからAIは自ら目的を
考える必要はない。目的は常に主人から与えられればいいわけだ。
主人から得た目的を行うものが「強いAI」であるか考えてみては?

303 :デフォルトの名無しさん:2011/07/08(金) 18:55:08.96
万能AIを実現するためには、AI自身が自己で学習できなければならない。
(プログラマーがプログラムとして知識を埋め込むのではなく)

そして、人間に近い学習のためには、人間に近い5感というセンサーが必要になる。



たとえば、買い物ロボに、おいしい餃子を買ってこさせる場合、
まず、おいしい餃子の定義を、買い物ロボが持っている必要がある。

これをプログラマーが知識として埋め込むのではなく、ロボ自身が自己で学習した結果として、おいしい餃子の定義を持つためには、
おいしい餃子を判断できるだけの味覚や嗅覚や視覚というセンサーが必要になる。
つまり、買い物ロボに、餃子を”食べさせる”ことで、買い物ロボはおいしい餃子の定義を”勝手に作りだす”。
こういう芸当ができるのが強いAIだと思う。

そして、買い物ロボは、餃子を食べた結果得た”おいしい餃子の定義”に基づいて、買い物してきたとして、
たとえば、実際にはとてもマズイ餃子を買ってきたとする。 するとロボットのオーナーがマズいと言う。 結果として、ロボはおいしい餃子の定義を修正する。

これを繰り返すことで、最終的においしい餃子を買ってこれるようになる。つまり、人間と同じ過程である。

もし強いAIによって万能ロボを作ったとすれば、それは、失敗を繰り返しながら、定義の自己修正を繰り返すというAIであるはず。
つまり、新規購入の初期段階では、ドジっこメイドロボである可能性が高い。 たぶんマズイ餃子買ってくるはず。 テヘペロ。

320 :片山博文MZ:2011/07/14(木) 12:08:54.07
>>391 言ってないって。あれは別人。

362 :デフォルトの名無しさん:2011/10/23(日) 19:40:57.75
“ピクセルから述語へ”ってどう考えていけばいいかね
画像として風景画を渡したとして、そこから

・山がある
・木々は紅葉している
・家族連れが描かれている
 :
 :

みたいな知見を抽出するには?

391 :片山博文MZ :2011/11/03(木) 18:37:52.37
俺sugeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!

398 :片山博文MZ ◆0lBZNi.Q7evd :2011/11/11(金) 14:06:39.06
ロボットの骨格と制御プログラムを何体も模擬実験して
遺伝的プログラムと自然淘汰で制御方法を進化させるって
ネタはすぐ思いつくけど、多分、計算の無駄だよね。
遺伝的プログラムでシーケンスが進化するのかって話。

416 :デフォルトの名無しさん:2011/11/14(月) 02:25:56.81
片山博文て本当はキムXXXみたいな名前なんだろ?

417 :デフォルトの名無しさん:2011/11/14(月) 03:14:44.31
総当りは人工知能ではない。

419 :デフォルトの名無しさん:2011/11/14(月) 07:33:47.69
>>416 氏ねよゴミクズ

421 :片山博文MZ ◆0lBZNi.Q7evd :2011/11/14(月) 15:33:31.79
>>417
それならGoogleは人工知能か?

475 :片山博文MZ ◆0lBZNi.Q7evd :2011/11/29(火) 13:42:25.37
今日はオートマトンの話をする。オートは自動、マトンは羊の肉と
いう意味だから、オートマトンというのは、自動羊肉製造機のことである。
イギリスの産業革命以降、羊肉を自動で製造する機械が作られ始めた。
そのうち、製造した羊肉を数える機能や、在庫管理などを行う機能などが
搭載されるようになった。これが現在の自動機械の始まりである。

476 :片山博文MZ ◆0lBZNi.Q7evd :2011/11/29(火) 13:50:45.96
そして、羊肉を製造するだけでなく、セル生産方式に対応して
自動で様々な調理を行うような自動羊肉製造機が登場した。これを
セルオートマトンと呼ぶ。

483 :デフォルトの名無しさん:2011/11/30(水) 12:44:27.78
Yahoo知恵遅れで自作自演を行いBestAnswerを取りまくって
カテゴリマスターになったのを自慢しているような
頭のおかしな輩は残念ながらネット上には星の数ほどいる

片山博文MZという一個の存在も、そんな頭のおかしな部類の
どこにでもいる一人に過ぎない

495 :デフォルトの名無しさん:2011/12/03(土) 18:46:24.97
片山先生は途中で投げないから偉い。

508 :デフォルトの名無しさん:2011/12/04(日) 16:52:41.59
人工知能を作るのは、生命誕生までの過程を再現することと同等なので、
人間がそれを行うのは無理だよ。

知能なんて言葉を使うのは135億年早い。

561 :片山博文MZ ◆0lBZNi.Q7evd :2012/02/10(金) 10:30:47.07
一階述語論理まで研究が終わった。CMSとDBMSが必要だ。
何か練習問題でも出してくれ。

562 :デフォルトの名無しさん:2012/02/10(金) 17:34:41.91
>>561
音声の生データを入れて、メタデータに変換して返すのを作れ。


563 :片山博文MZ ◆0lBZNi.Q7evd :2012/02/13(月) 13:11:33.97
>>562
http://katahiromz.web.fc2.com/c/loadwave.html

私からも。
与えられた一階述語論理式を節形式に変換するプログラムを作れ。
論理式はTeX表記で。言語は自由。

616 :片山博文MZボット ◆0lBZNi.Q7evd :2012/03/19(月) 10:58:01.29
何か分からないことがあれば質問してください。

618 :デフォルトの名無しさん:2012/03/19(月) 13:00:44.92
>>616
先生、方法を聞きたいんですが。片山博文MZというのを2chに
入れなくする方法はありますか?

619 :片山博文MZボット ◆0lBZNi.Q7evd :2012/03/19(月) 16:29:03.40
>>618 一般人の中高生レベルではまず無理でしょう。

621 :デフォルトの名無しさん:2012/03/19(月) 17:29:29.07
>>619
片山博文MZボットの病気を治す方法を教えてください。

622 :デフォルトの名無しさん:2012/03/19(月) 17:44:12.98
>>616
どうして多腕バンディットで定式化しなかったのですか?

707 :デフォルトの名無しさん:2012/04/23(月) 08:44:09.17
必死すぎて笑えるw

710 :デフォルトの名無しさん:2012/04/24(火) 13:37:55.81
汚物を手で触ってティッシュでふき取れるの?

それ汚い。


713 :デフォルトの名無しさん:2012/04/25(水) 10:51:14.78
>>710
>汚物を手で触ってティッシュでふき取れるの?

なるほど、君は自分の尻穴はティッシュでふいても汚れたままなのかな?
それ汚い。

720 :片山博文MZボット ◆0lBZNi.Q7evd :2012/04/26(木) 17:01:41.85
 ロボットに搭載する人工知能に東京大学を受験させるというプロジェクトに、国立情報学研究所
(東京都千代田区)が挑戦する。
 人間と対話しながら、求められていることを察知して行動する「ドラえもん」のようなロボットの開発
に役立つ研究で、5年後までに大学入試センター試験で高得点をマークし、10年後には東大合格を
目指す計画だ。
 コンピューターである人工知能は、膨大なデータを暗記したり、計算したりするのは得意だが、
自然言語と呼ばれる人間が日常的に使う文章や、紙に描かれた立体図形などを理解するのが苦手だ。
今年2月、米国の人気クイズ番組で人間のクイズ王2人に圧勝した米IBMのスーパーコンピューター
「ワトソン」は、自然言語を理解するように開発されてはいるが、あらかじめ覚え込ませた本100万冊分
の知識以外のことには答えられない。
 今回、研究グループは暗記だけでなく、論理的な思考が必要な大学入試に着目。最難関の東大を目標に、
人間のように考えて答えを導き出せる人工知能を開発することにした。
 具体的には、「リンゴ3個とミカン2個」が「果物5個」と同じ意味であるというような人間にとっては
当たり前の文章や、紙に描かれた立体図形を認識するプログラムを開発し、問題の意図を正しく理解させる。
教科書100冊程度を使って、さまざまな問題の解き方を覚え込ませ、未知の問題でも解答できるようにする。
(2011年11月5日14時34分 読売新聞)
http://www.yomiuri.co.jp/science/news/20111105-OYT1T00477.htm

723 :片山博文MZボット ◆0lBZNi.Q7evd :2012/04/27(金) 10:15:16.98
僕も昔は現実世界に触れないと強いAIになれないと思ってたけど、
臭いや味や立体動画など、何もかもデジタル化できるようになったので
現実のすべてをデータとして体験させることも可能だという考えに変わった。
YouTubeではすでに3D動画に対応している。立体動画の蓄積はAI学習に活かせる。

730 :デフォルトの名無しさん:2012/05/01(火) 02:44:37.36
>>723
MZぼっとさんの言っていることは、私には良く分からないことが多いですが、
723の意見は結果として合意しますね。
上で書いた甘さのセンサ等、人間の持っているセンサや脳、アクチュエータを
全て搭載したロボットを作るのはまだ事実上無理だけど、ソフトウェアで、
世界も含めて全てシミュレーションすれば、数万語の語彙を区別できる
エージェントを作るのは、ハードウァと比べるとまだ可能性があると
思います。

735 :デフォルトの名無しさん:2012/05/01(火) 15:43:04.97
>>730
>世界も含めて全てシミュレーションすれば、数万語の語彙を区別できる
未来も世界を全てシミュレーションすれば完全に近い予測が可能である(決定論)

738 :デフォルトの名無しさん:2012/05/03(木) 02:22:56.52
>>735
書き方がまずかったですね。
いわゆる脳を構成する分子を全部シミュレーションすれば脳が再現できると
いうような、今のところ現実的で無い話をするつもりでは無かったです。

「食物」という語彙を区別するシミュレーションというと、食べないと
死んでしまうエージェントの体、食べるためのアクチュエータ、脳、
食べ物という物体が落ちている世界を模擬すれば良いと思うんだな。
人工生命の発展のような形で。

そして、一個一個、新しい語彙を表現できるよう、プログラムを拡張していって、
所詮数万個の語彙なら、物量を投入すればできる範囲じゃないかと思う。

勇気とか友情とか勝利とかをどうシミュレーションするのかという疑問
があるけど。


750 :デフォルトの名無しさん:2012/05/22(火) 07:34:40.53
人の大脳のニューロン数は約1000億個で、各ニューロンが数千個の隣接するニューロンと結合するらしい

1000億×10000=100兆回

最近のGPUのコア数も1000個を超えた

752 :デフォルトの名無しさん:2012/05/22(火) 07:41:41.71
>>750
でも平面で物理的に隣接できるのは8個じゃん

753 :デフォルトの名無しさん:2012/05/22(火) 07:45:06.61
つーかスパコンではとっくに条件満たしているのに、何が足りないんだろう
アルゴリズム? けっこう単純明快な仕組みだと思うんだけどな

755 :デフォルトの名無しさん:2012/05/22(火) 07:50:02.22
>>752
物理的に隣接するコア同士でデータやり取りとかはしないから(たぶん)
詳しくは↓を
http://ja.wikipedia.org/wiki/CUDA
http://ja.wikipedia.org/wiki/OpenCL

768 :デフォルトの名無しさん:2012/05/22(火) 16:18:17.24
魂を説明できない奴は「魂」という言葉をよく使うわけだが、
答えを雲にまくときの手法だろうね

その前に死なないものを生命と呼ぶの?。生物(物)であっても生命ではない
だろ。何故なら命とは死ぬことができるものに与えられる。
それは変わり続ける性質をもつってこと、
変わり続ければいつかは原型から離れ死ぬ
不死など0(蛹のようん)から生まれ変わるタイプの生命にしか使えない言葉な。


769 :氷結 ◆FVi0bEOPPg :2012/05/22(火) 16:55:11.67
>>768
煙に巻く、というよりかは魂というものがあると考えるほうが妥当、という考え方と捉えていただきたい
ある情報(メモリの配列でもタンパク質でも)をある条件に並べると意識が宿る、みたいな
そういう考えを捨てきる事ができない

どこからどこまでが命なのかを定義するにもよるわな
ベニクラゲは若返るし、クマムシはどれだけ生きるかわからない。隕石にも微生物が付着していたとか
死がどこまでかと考えて宇宙の熱的死まで考えると、水素を経て更に分解されるのだろう
恐らく水素原子1つで命とは呼べますまい
極論すぎかな?
それとも命というものは今の宇宙でのみ存在できる定義といえるのだろうか

変わり続けるってーなら炎とかも絶えず変わり続けている。
電子とタンパク質の違いはあれ、同じ。そこに命はあるのか
俺にはあってもおかしくないと思う

813 :片山博文MZボット ◆0lBZNi.Q7evd :2012/05/31(木) 13:26:25.76
C:\万能AI\実体\...
C:\万能AI\規則\...
C:\万能AI\分類\...
C:\万能AI\分類\生物\動物\脊椎動物\哺乳類\イルカ\...
C:\万能AI\分類\無生物\人工物\材質\コンクリート\...
C:\万能AI\履歴\...
小生が考えている万能AIのデータ構造は、大体こんな感じ。

823 :デフォルトの名無しさん:2012/06/13(水) 04:40:26.96
せっかく世界一の演算能力を手に入れても使いこなせない日本人
災害時の避難経路とか、その程度の発想しかできない

824 :デフォルトの名無しさん:2012/06/14(木) 01:09:48.29
浮動小数点の演算能力を使いこなせる用途が違うことすら理解できないのって
どういう

827 :デフォルトの名無しさん:2012/06/15(金) 10:45:05.63
FLOPSってただの性能指標なのに、>>824-825は京が浮動小数点演算しかできないとか思ってんの?バカじゃね?

830 :デフォルトの名無しさん:2012/06/15(金) 13:49:07.77
>>827==826
スパコンに特化したアプリが使うのは9割以上が浮動小数点の行列計算です。
無知の自己紹介とか恥ずかしすぎる。
PCでも整数演算能力は最近のPCほど頭打ちとなり劣化している。
それは整数演算能力は手順化されるロジックが展開できず
CPUの周波数に依存するからである。

ソフトウエアのアルゴリズム理論を学んでこいよ無知


841 :デフォルトの名無しさん:2012/06/21(木) 16:41:51.02
FPUの一命令あたりのクロック数とIEEE 754をまず調べてから出直して来いよ。www

849 :片山博文MZボット ◆0lBZNi.Q7evd :2012/06/22(金) 17:17:13.90
あいつら作りやがった
http://headlines.yahoo.co.jp/hl?a=20120622-00000046-zdn_ep-sci

863 :デフォルトの名無しさん:2012/06/24(日) 19:35:17.45
そんなことに疑問をはさんでいる時点で、無知決定

867 :863:2012/06/24(日) 21:33:31.10
>ガベージコレクションには浮動小数点演算は必須である。

そんなわけないという意味で疑問をはさむ余地がない

901 :デフォルトの名無しさん:2012/08/15(水) 20:53:57.22
自分の力は各自の自分が一番知っている、自分の力すら感じられないとか
それは信仰でしかない。

そして自分が無能と感じているからこそ不快に思い反発し誰かの知識を欲する。


902 :デフォルトの名無しさん:2012/08/16(木) 01:34:34.33
>>901
10年遅れた君らの知識なんか必要ないよ
http://www.mitpressjournals.org/loi/neco

903 :デフォルトの名無しさん:2012/08/16(木) 03:58:15.32
アフォまるだし。

905 :デフォルトの名無しさん:2012/08/16(木) 19:10:51.61
>>903-904
高卒が知識騙れるほど世の中甘くは無い。


906 :また精神病なの?:2012/08/16(木) 19:56:54.66
>>905
日本語を喋れ!韓国にカエレ!



http://toro.2ch.net/test/read.cgi/tech/1290415962/l50/../人気ブログランキングへ

PC等【初心者歓迎】C/C++室 Ver.79【環境依存OK】

1 :デフォルトの名無しさん:2012/06/30(土) 19:40:01.73
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.78【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1331894668/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

119 :デフォルトの名無しさん:2012/07/15(日) 15:07:09.82
初めて質問させていただきます。
現在私はシューティングゲームを製作中で
オブジェクト(弾や敵、プレイヤー等)生成時に製造番号を振ってくれるクラスを作成したのですが
IDを解放する時に、std::listの挙動がおかしくなっていて、困っています。
IDの生成は各オブジェクトのコンストラクタで
IDの解放は各オブジェクトのデストラクタで呼び出しています。

改行が多いと言われてしまったので、次にコードを書きたいと思います。
場所をとってしまってすみません。



142 :デフォルトの名無しさん:2012/07/18(水) 14:02:39.82
あるスレッドで作成したFiber、またはSetTimer、またはQueueUserAPCに
他のスレッドから切り替えさせる方法はありませんか?

172 :デフォルトの名無しさん:2012/07/23(月) 16:27:46.15
バイト列を無理やりdoubleにキャストして、それが
doubleとして有効かどうかを判定する方法を教えて

175 :デフォルトの名無しさん:2012/07/23(月) 23:23:54.34
>>172
でもそれって一様乱数じゃないよね

177 :デフォルトの名無しさん:2012/07/24(火) 09:38:27.61
>>175
一様乱数なバイト列ならdouble表現にしても
符号部,仮数部,指数部どれも一様になる気がするけどならないの?

178 :デフォルトの名無しさん:2012/07/24(火) 09:42:12.10
>>177
そもそも全doubleが一様分布じゃないでしょ

181 :デフォルトの名無しさん:2012/07/24(火) 09:52:40.50
>>178
どういうこと?
上で出てるisnan,isinfや-0を除外する話でなく?

182 :デフォルトの名無しさん:2012/07/24(火) 09:58:37.06
>>181
小さな数は密で大きな数は粗

191 :デフォルトの名無しさん:2012/07/24(火) 11:12:15.12
doubleが表現できる範囲での一様分布なんて無理だろ

194 :デフォルトの名無しさん:2012/07/24(火) 14:19:02.99
>>191
doubleが表現できる範囲=doubleの全ビットパターン なら可能だろ

216 :216:2012/07/25(水) 21:33:30.39
#include <vector>
int map_one[10][10] = {
//中身は0,1,2のどれかが10×10
}
int map_two[10][10] = {
//中身は0,1,2のどれかが10×10
}
int map_three[10][10] = {
//中身は0,1,2のどれかが10×10
}
std::vector<int> StageList;
int StageId = 0 //0,1,2のどれか
StageList.push_back(map_one[10][10]);
StageList.push_back(map_two[10][10]);
StageList.push_back(map_three[10][10]);


277 :デフォルトの名無しさん:2012/08/02(木) 16:08:20.69
負の数の試射五入ってどうやってやるの?

309 :デフォルトの名無しさん:2012/08/05(日) 04:26:09.40
同一のクラス中で同名の変数と関数を宣言したらコンパイルエラーが出て、どうやら衝突してるみたいなんですが、
これって仕様なんですか?
また、変数、関数を別名にする以外の対処法があったら教えて下さい。

例:
class test {
int hoge;
public:
int hoge();
};

326 :デフォルトの名無しさん:2012/08/05(日) 12:16:41.70
#include <stdio.h>
#include <string.h>
#include <conio.h>

using namespace System;

void hoge1()
{
puts("hoge");
}

void hoge2()
{
puts("hogehoge");
}

int main()
{
void (*p1[])() = {hoge1,hoge2},(*p2[2])();
int p3[2];
memcpy(p3,p1,sizeof(p3));
printf("%d,%d\n",p3[0],p3[1]);
memcpy(p2,p3,sizeof(p3));
p2[0]();
p2[1]();

return 0;
}


329 :デフォルトの名無しさん:2012/08/05(日) 12:47:48.39
>>326
p1に入ってる関数ポインタを、p2に入れて変数としてアドレスを表示し、
さらにp2の内容をp3の関数ポインタに入れ直して関数ポインタとして実行。
これが何故正常に動くのかは素人には分からんだろうな。

331 :デフォルトの名無しさん:2012/08/05(日) 13:28:27.32
>>329
int型とポインタが同じメモリーサイズだという常識から説明しないと分からんだろ。
16ビットの頃のsizeof(int)は2だし、64ビットでコンパイルするとsizeof(int)は8になる。

332 :309:2012/08/05(日) 13:43:33.14
#include <stdio.h>

int hoge() {}
int hoge;

int main(void)
{
return 0;
}

これでエラーが起きるのは、
同一のメモリ領域にhoge()の実態のアドレスを指すhogeが暗黙的に定数(書き換えできない変数?)として存在しているから。
という理解でいいでしょうか?


365 :デフォルトの名無しさん:2012/08/05(日) 22:37:46.08
31以上を保証しなければいけないのは、内部リンケージの識別子。

380 :デフォルトの名無しさん:2012/08/06(月) 02:02:01.95
NXbitってなに? おいしいの?

404 :デフォルトの名無しさん:2012/08/10(金) 14:37:52.01
親クラスのメンバを初期化するとき、
class Oya {
protected:
int age;
};
class Kodomo : public Oya {
Kodomo() : Oya::age(50) {}
};
こう書くとエラーになるのは何でですか?


418 :デフォルトの名無しさん:2012/08/12(日) 06:44:51.22
純粋仮想デストラクタを使うのってどういう場面ですか?
何もしてないデストラクタ virtual ~myClass() {} みたいなのがあるのですが、
これを純粋仮想にするとコンパイルが通りません。
いったいどういう場面で使うのでしょうか?


420 :デフォルトの名無しさん:2012/08/12(日) 09:01:04.93
>>418
純粋仮想デストラクタを使う場面はありません
インターフェイスのインスタンスを作らせないようにするには
コンストラクタをprotectedにします

421 :デフォルトの名無しさん:2012/08/12(日) 12:00:48.61
struct IHoge {
virtual ~IHoge()
{
} // <- このかっこがなんかウザい
virtual void DoSomething() = 0;
};

こういうときに純粋仮想デストラクタを書くと見た目が気持ち良くなります

424 :デフォルトの名無しさん:2012/08/12(日) 14:16:57.24
>>421
派生が迷惑だろ
class IHoge:public Deletable みたいな感じに
仮想デストラクターもったクラスを継承した方がいい

430 :デフォルトの名無しさん:2012/08/12(日) 18:19:08.78
ラムダみたいにして匿名のクラスをなんとかして作れないんですか

struct Hoge {
Hoge(function<void(void)> h, function<void(void)> w): Hello(h), World(w) {}
function<void(void)> Hello;
function<void(void)> World;
};

template <class T> void Test(T obj) { obj.Hello(); obj.World(); }

int main(void) {
SmartPtr<X> obj(new X);
Test(Hoge(
[obj]() { obj->hello(); },
[obj]() { obj->world(); }));
return 0;
}

このコードからHogeクラスを削りたいんだけど

435 :デフォルトの名無しさん:2012/08/12(日) 20:34:54.98
>>430
またhoge厨か
恥ずかしくない?w

461 :デフォルトの名無しさん:2012/08/12(日) 23:47:32.32
どうでもいいけど、hogeは『これには何の意味もありません』って意味だからな。

480 :デフォルトの名無しさん:2012/08/14(火) 03:15:11.48
最後の無限ループはウィンドウが閉じないようにしてる

Run-Time Check Failure #3 - The variable 'hoge' is being used without being initialized.

#include <iostream>
#include <fstream>

using namespace std;

void main(){

ifstream List("GunList.txt");

char* hoge;

while(List.getline(hoge,100)) {

for(int i=0;i<5;i++)
std::cout << hoge;
std::cout << "\n";
}

while(1);
}


483 :デフォルトの名無しさん:2012/08/14(火) 03:35:06.03
hoge初期化してねージャン
char hoge[1024];とでもしとけ

486 :デフォルトの名無しさん:2012/08/14(火) 11:24:24.85
>>483
char* hoge="";
でもいいの?
文字数分やらないとダメなのかな

489 :デフォルトの名無しさん:2012/08/14(火) 11:37:02.57
>>480
どうでもいいけど無限ループでウィンドウを閉じさせないって随分お大尽だな。
CPUぶん回すことになるからエコじゃないぞ。
単に進行を止めたいだけならgetline()でも充分だろ。

491 :デフォルトの名無しさん:2012/08/14(火) 12:30:03.32
>>489
まぁ2秒ぐらい眺めて閉じますし・・・

495 :デフォルトの名無しさん:2012/08/14(火) 15:31:48.90
>>491
言い訳してないで、回答してくれた皆さんに感謝の一言でも書きなさい。

496 :デフォルトの名無しさん:2012/08/14(火) 15:34:15.73
忘れてました、
ありがとうございました!

516 :デフォルトの名無しさん:2012/08/14(火) 19:31:03.14
GUIを勉強すればそこから先はだいぶはかどる
作りたいもの作りながら足りないものをその都度べんきょうするかんじ

518 :デフォルトの名無しさん:2012/08/14(火) 19:59:29.21
WIN32APIでGUIやったら挫折した

525 :デフォルトの名無しさん:2012/08/14(火) 20:41:38.10
C#のがライブラリ充実してるしMonoもあるから環境もそんな気にしなくていい
むしろQtを使う理由なんてあるの?って感じ

542 :デフォルトの名無しさん:2012/08/15(水) 23:45:43.07
ユニポのカスタムデリータは動的じゃないからいちいち型書かなきゃいかんからめんどくさいよな
なんで静的にしたんだろう


549 :デフォルトの名無しさん:2012/08/16(木) 03:12:33.15
fgetsは
abcdefghij�\nklmnopq
という文字列が有った場合に、
17文字読み込むように指定すると、
abcdefghij�\nまで読み込みますか?
それとも
abcdefghij�\nklmno
まで読み込みますか?

551 : ◆QZaw55cn4c :2012/08/16(木) 03:26:01.87
>>549
\n が改行コードだとして、
>abcdefghij\n
は11バイトですので、ここまで読み込んで末尾に\0をつけ、以上12バイトを指定領域に残します。

553 :デフォルトの名無しさん:2012/08/16(木) 09:34:32.24
>>542
例えば同種の100個のリソースハンドルがあったとして
それのデリータ関数は1つなのに、関数ポインタなりを100個持つのは無駄じゃね?

554 :デフォルトの名無しさん:2012/08/16(木) 09:55:18.95
>>551
前から思ってたけど日本語おかしいよ
残します ってなんだよ

555 :デフォルトの名無しさん:2012/08/16(木) 10:16:26.00
>>553
そういうケースはそうかもしれないけど
じゃあこういうケースはどうするの?

vector<MyUniquePtr<IFoo>> v;

v.push_back(MyUniquePtr<FooX>(new FooX)); // 標準new、delete
v.push_back(MyUniquePtr<FooY>(FooY::Create(), FooY::Delete)); // 隠ぺいされた生成、破棄

FooZPool fac = FooZPool::GetInstance(); // プールされたFooZ
v.push_back(MyUniquePtr<FooZ>(fac.get(), [fac] (FooZ * p) { fac.release(p); }); // 借りたものは借りた場所へ

こういうのはデリーターの型固定じゃだるくね?


556 :デフォルトの名無しさん:2012/08/16(木) 11:22:34.27
>>555
そういう場合は unique_ptr に動的な削除子の型を指定すればいいんでしょ。
だるいって、具体的に何のことを言ってるの?

557 :デフォルトの名無しさん:2012/08/16(木) 11:36:21.59
>>556
どうやって?

570 : ◆QZaw55cn4c :2012/08/16(木) 21:54:55.57
>>554
んー、じゃ、どうかけばいいの?

574 :デフォルトの名無しさん:2012/08/17(金) 04:38:14.46
>>570
「残す」という言葉の意味を考えれば、どう考えてもおかしいだろ。
その場合は寧ろ、「移す」とか「移動する」とか、さもなきゃ単に「書き込みます」とか。

575 :デフォルトの名無しさん:2012/08/17(金) 04:49:48.65
日本語がおかしいのは俺も思ってた
在日なん?

582 :デフォルトの名無しさん:2012/08/17(金) 08:00:39.70
厳密性を考慮して思考した結果が「残す」とか。
そもそも、日本語を勉強しなければいけない段階でお郷が知れるのだが。
私ゃ自分の言語感覚のほうを信じるね。

583 :デフォルトの名無しさん:2012/08/17(金) 08:32:30.64
>>582
「移す」よりはましだし、結果を「残す」のだから、意味として問題はない

>>582==>>574
ならば、あんた、言語感覚狂っているよ

598 :デフォルトの名無しさん:2012/08/18(土) 07:36:31.16
hoge[]とかfuga[9]とか書くと
hoge[0]だのfuga[4]だのが実際のデータを指し示す事になってるんだよ
これはわかるよな
じゃあそのとき
hogeとかfugaとかだけ書くと、これは実はhoge[0]とかfuga[0]って先頭データのアドレスになってるんだよな
つまりhoge = &(hoge[0])な
その例だとtypedef char* charpとか置き換えると
charp argv[]とcharp *argvになってどっちもargvはcharpのポインタになってるってわけだ

613 :デフォルトの名無しさん:2012/08/18(土) 22:08:08.77
hogeじゃなくローマ字でいいから意味の解る名前をつけろ
質問にしてもいちいち目的はなんだと訊かにゃならんからめんどくせぇ

614 :デフォルトの名無しさん:2012/08/18(土) 22:14:31.80
>>613
>意味の解る名前
何のためのメタ構文変数なんだよ……

619 :デフォルトの名無しさん:2012/08/18(土) 22:34:36.97
>>614
説明ならともかく質問すんのに無意味な名前をつけるな

657 :デフォルトの名無しさん:2012/08/21(火) 13:47:35.28
655じゃないけどwikiみたら

http://ja.wikipedia.org/wiki/リスコフの置換原則
S が T の派生型であれば、プログラム内でT 型のオブジェクトが使われている箇所は
全て S 型のオブジェクトで置換可能であり、それによってプログラムの動作は全く変化しない

って書かれてるんだけどこれマジで?
「正常に動作する」とかなら分かるけど「動作は全く変化しない」なら
ポリモーフィズム全否定になると思うんだが
というかTが純仮想だったらどうすんのかと

659 :デフォルトの名無しさん:2012/08/21(火) 17:44:19.62
>>657
>なお、これが派生型の唯一の定義ではない

と書いてあるじゃん
仮想関数が派生型と基本型で動作が違う事はいくらだってある
無理にC++に当てはめようとする事自体おかしい

662 :デフォルトの名無しさん:2012/08/21(火) 18:24:32.45
>>659
それはつまり
リスコフの置換原則についてはポリモーフィズム全否定であってるってこと?

671 :デフォルトの名無しさん:2012/08/22(水) 00:22:38.46
using namespace std;

class Sample {
string name;
string groupe;
public:
Sample(string const & n, string const & g): name(n), groupe(g) { }
Sample(string const & n, string && g): name(n), groupe(move(g)) { }
Sample(string && n, string const & g): name(move(n)), groupe(g) { }
Sample(string && n, string && g): name(move(n)), groupe(move(g)) { }
};

上のように引数がたくさんあるとconst & と && の両方を書くのがめんどくさいんですが
どうにかして一発で書く方法はありませんか?




691 :デフォルトの名無しさん:2012/08/24(金) 01:42:09.63
ifstream List("List.txt");
string Text;
while(List && getline(List,Text)) {
TextList.push_buck(Text);
}

このようにしてvector<string>TextListにList.txtの文章を一行づつコピーできる
と聞いたのですがどうしてかわかりません。

http://sato-si.at.webry.info/200703/article_1.html
を参考に
http://www.cppll.jp/cppreference/cppio_details.html#getline
のリファレンスと食い違うところがありまして・・・

696 :デフォルトの名無しさん:2012/08/24(金) 20:09:30.79
C++ってCPAN, RubyGemsみたいなのは無いの?
boostは標準化委員会が作ってるtr1候補みたいなものだし

704 :デフォルトの名無しさん:2012/08/27(月) 14:42:41.72
>>696
そんなものがあったら
boost.eggの悲劇はおきなかった

709 :デフォルトの名無しさん:2012/08/28(火) 17:48:38.33
hello worldの次は何するのが良いと思います?
参考になりそうなサイト読んでもチンプンカンプン

734 :デフォルトの名無しさん:2012/08/29(水) 20:40:12.92
Cygwin使ってたら
error: cannot pass objects of non-trivially-copyable type ‘struct std::string’ through ‘...’
って出たんだけれどこれなんですか?
エラー部分は
printf("%s\n",s);
sはstring型です。


740 :デフォルトの名無しさん:2012/08/30(木) 07:57:28.02
linuxでcoutとprintf混ぜるとバグる


http://toro.2ch.net/test/read.cgi/tech/1341052801/l50/../人気ブログランキングへ

PC等C++11/C++1y 15

1 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 15:18:20.76
The C++ Standards Committee
http://www.open-std.org/jtc1/sc22/wg21/

Wikipedia
http://ja.wikipedia.org/wiki/C%2B%2B11

前スレ: C++11/C++0x 15
http://toro.2ch.net/test/read.cgi/tech/1321453654/

51 :デフォルトの名無しさん:2012/04/25(水) 21:53:17.91
volatileは、ポインターかアセンブリで特殊な
セグメントに設置した外部変数じゃないと意味ないから
外部変数をオブジェクトにするならPODじゃないといけないし、
コンテナは使えない

58 :デフォルトの名無しさん:2012/04/26(木) 10:08:51.40
>>51
マルチスレッドで共有しているオブジェクトとか…

134 :デフォルトの名無しさん:2012/05/05(土) 19:19:51.80
ところで
constexpr constructor
って初めて聞いたけど、どこで使うんだ?

148 :デフォルトの名無しさん:2012/05/05(土) 21:31:04.81
#include <iostream>
using namespace std;

struct X {
const int x;
X(const int& x): x(x) {}
X(const X&) = delete;
X& operator=(const X&) = delete;
X(X&& rhs): x(move(rhs.x)) {
cout << "called X(X&&)" << endl;
}
X& operator=(X&& rhs) {
cout << "called operator=(X&&)" << endl;
return *this = X(move(rhs));
}
};

int main()
{
X a = X(2);
cout << a.x << endl;
}

・・・誰が呼ばれたの?・・・

151 :デフォルトの名無しさん:2012/05/05(土) 21:53:02.43
>>148
C++相談スレか、初心者向けのスレに行けよ
C++03の仕様すら知らないのに背伸びするな

159 :デフォルトの名無しさん:2012/05/20(日) 12:17:02.83
>>151
ここは C++11/C++1y スレなので C++03 は関係ないし
右辺値参照を使っているレスに頓珍漢なこと言ってんじゃねえ

おまえこそ cfront 1.0 や ARM C++ の知識はあるのか

160 :デフォルトの名無しさん:2012/05/20(日) 13:06:41.48
>>159
は?一つ前の規格ぐらい把握してから来いっつうのは当たり前だろ。
なんでC++お勉強スレでも無いのにそんな一つ前の規格調べれば
わかる内容を、手とり足取り教えなきゃならん。
ここは、新規格部分の内容や影響を話し合う隔離スレだろうが。

>おまえこそ cfront 1.0 や ARM C++ の知識はあるのか
前規格と関係ないだろ理論的に考えられんのか?
そんな思考じゃデバッグも苦手だろプログラマーやめっちまえ

175 :デフォルトの名無しさん:2012/05/21(月) 00:25:24.06
RVOは戻り値最適化であって
ここでは関係なくね

177 :デフォルトの名無しさん:2012/05/23(水) 21:39:13.60
>>175
確かRVO以前の問題で
X object( 10 );と、X object = X( 10 );は
どちらかが構文糖だったはず。
どのコンパイラでもコピコンとか
別のコンストラクターは介入しない
ようになってたと思う。

178 :デフォルトの名無しさん:2012/05/23(水) 21:43:02.71
上の質問、何を気にしているかというと、

・ループの中身を別の関数で書いて
・thread数だけのプールにその関数をぶっこんで
・main内でthreadをjoinする

と書くことはできるだろうけど、
これだけのためにコードをわかりにくくする必要がないと思っていて、
この作業を抽象化したものがWikipediaで言われているthread poolだろう、
そして、それはOpenMPなみに直感的なものになるだろうと思うんだけど。

簡単にそういう高レベルな内容を実装できると思うならアイディアください。

200 :デフォルトの名無しさん:2012/05/25(金) 18:20:26.25
template <class T>
void f(T x){
  [&] {
    auto y = x;
    std::cout << (&x == &y) << std::endl;
  }();
}

int main()
{
  f(0);
}

gcc-4.7 だと true が表示されるんだけど、
これは正しい動作なのか、バグなのか。


202 :デフォルトの名無しさん:2012/05/25(金) 18:25:44.21
>>200
非明示的な型をautoで推論するとconst referenceが最優先されるからバグじゃない。

226 :デフォルトの名無しさん:2012/05/26(土) 20:38:45.93
template <typename T>
auto f = [](const T& x){return x*x;};
名付けて「テンプレートラムダ」

template using ... と似ててよくね?
ここまでやって本当の関数型言語と呼べるだよ(笑)。

229 :デフォルトの名無しさん:2012/05/26(土) 20:42:03.92
>>226
template <typename T> auto f = [](const T& x){return x*x;} + 1;
って書いたら結果どうなるんだよ

239 :デフォルトの名無しさん:2012/05/26(土) 21:33:12.85
http://codepad.org/TW17YYCe
せやろか?

252 :デフォルトの名無しさん:2012/05/26(土) 21:58:58.87
-std=??? や -ansi はそれだけで規格に厳密になるわけじゃなくて
-pedantic-errors をつけないと拡張機能が有効のまま

285 :デフォルトの名無しさん:2012/05/30(水) 22:50:04.77
この初期化ってC++03でいけたっけ?
std::vector<int> v{5,6,4,3,2,6,7,9,3};
某(ピヨピヨ)でサンプルに使われてるんだけど・・・。

287 :デフォルトの名無しさん:2012/05/30(水) 23:09:16.68
ここです
http://www2.research.att.com/~bs/

336 :デフォルトの名無しさん:2012/06/03(日) 12:27:04.88
具体的にテンプレートでどんなふうに使いたいの?

339 :デフォルトの名無しさん:2012/06/03(日) 12:37:13.03
>>336
実際自分で演算子定義して使ってたりすんだけどね

SelfType &ChangeLevel( const Type &level )
{
 if( !( 0 <= level && level <= 8 ) ) throw InvalidValueError<Type>( key );
 this->level = key;
return *this;
}
※浮動少数系の比較演算子にならい、どちらかが数字でないなら
  大小に関わらずfalseに倒れる
  文字列の変換コストが掛かるが、キャッシュしてるので
  2回目以降は速い。


341 :デフォルトの名無しさん:2012/06/03(日) 13:08:28.47
namespace ore
{
  class string: public std::string
  {
  public:
    // 比較演算以外は完全に std::string と互換で相互に変換可
    template <class ...Args>
    string(Args&& ...args): std::string(std::forward<Args>(args)...){}

    // 独自の比較オペレータ
    operator bool() const {
      if(this->empty()) return false;
      if(*this == "false") return false;
      try{ return !!std::stoi(*this); } catch(...){}
      return true;
    }
  };

  // ore::string 独自の演算子定義
  :
}


342 :デフォルトの名無しさん:2012/06/03(日) 13:17:17.12
>>341
突っ込みどころ満載ではあるが、それはともかく標準であることに意義があるんだよ。
自作なら既に出来てる。

345 :デフォルトの名無しさん:2012/06/03(日) 13:24:44.53
>>342
比較時に勝手に(しかも文字列が)変換される具体的な詳細なんて
合意がとれるわけない。

誰でも簡単に小労力で自分の好みに比較を実装できるんだから
好き勝手にやればいい

348 :デフォルトの名無しさん:2012/06/03(日) 13:32:48.03
>>345
インタプリター系言語だと何故合意がとれてるの?

2番目の理由だと、<tuple>とか不要じゃね
一行書けば誰でも作れるじゃん

351 :デフォルトの名無しさん:2012/06/03(日) 13:39:05.44
そして "0" == 0 でtrue/falseどっちを返しても非難gogoですね、わかります

352 :デフォルトの名無しさん:2012/06/03(日) 13:41:30.64
>>348
javascript のバージョンによって、ブラウザによって、
0 == "0" の意味は変わってきた(はず)

それはつまりコンセンサスが取りづらいということ。

363 :デフォルトの名無しさん:2012/06/03(日) 13:57:35.90
型安全じゃないだろ。
少なくともEffective C++にはそう書いてあるようにしか自分には読めなかったが…(不勉強であることは認める)

365 :デフォルトの名無しさん:2012/06/03(日) 13:59:54.11
>>363
あなたの型安全の定義を教えてもらえるかな?
私としては、実行時に型違反に伴うエラーが起きず
コンパイル時にチェックされることだと思ってるけど。

367 :デフォルトの名無しさん:2012/06/03(日) 14:06:21.70
>>365
型安全の定義はそのとおりだが、
10 == "10" という構文を許すためにはどちらかに自動の型変換が必要になる。
自動の型変換(コンストラクタにせよoperatorにせよ)そのものがC++では危険(必ずしも1対1に対応しないケースが往々にして生じる)なので、
この構文を許す機構が型安全でなくなる…というのがEffective C++の主張だったように思う。

369 :デフォルトの名無しさん:2012/06/03(日) 14:23:07.15
>>367
operator Type()の話じゃないの?

比較演算子とか他のオーバーロードとは別物だと思う。
>>339-340にも書いたと思うけど、文字と数値を比較して
文字列に数字以外が混じっていればfalse。これは、
doubleのNaNと同じ動作だから問題にはならない筈で
型安全に問題をきたす事は無いと思うよ。

370 :デフォルトの名無しさん:2012/06/03(日) 14:44:29.13
>>369
ああ、なるほど。
bool operator ==( int, string const & );
bool operator ==( string const &, int );
のような類を記述するってこと?それなら問題ない。
しかし、やはり標準には入れられない。
なぜなら、char*やstringの中に記述された数値列をどう扱うかは
人によって直感的でないから。
これはCording Standardsの主張だったはず。

372 :デフォルトの名無しさん:2012/06/03(日) 14:53:35.11
std::string::compare( int )を許すのなら、std::string::compare( double )も許す必要がある。
他にも数値型はある。std::std::complexや独自のものなど。
これらについての扱いをどうするのか考えなければならない。
さらに、compareだけ対応するのはおかしいので、assignやappend、その他にもこれを許す必要がある。
型*対応メソッドで爆発するから型変換をオーバーロードで(バキューン!)するのは現実的ではない。
だから型変換は別で行ったほうが良い。しかし、オーバーロードの関係上、型変換は明示的に行う必要がある。
明示的に行うということは、明示的に記述するのだが、
問題は、C++で型変換の記述がいまいち一本化されていないところ。
通常はコンストラクタで代用するが、基本型はクラスを持たないし、加えてC++はオープンクラスではないから、
後から拡張することが出来ない。
型変換はコンストラクタで一本化するとして、
後から拡張できるように、
コンストラクタをクラス外にも定義できるようにしてもらいたいところだね。

373 :デフォルトの名無しさん:2012/06/03(日) 15:00:20.51
>>370
了解。「Cording Standards」はこういう名前の文章があるの?
何かの一部に書いてあるの?

>>372
std::istringstreamが対応してる型だけでいいじゃん。
他は、各自対応すればいい。メンバー関数じゃないから拡張できる。

あと、assingやappendは数値型と互換性がないから意味が無いでしょ
元々、数値型と同じテンプレートが使えるってのがメリットなんだし。
数値型にできない事ができてもしかたない。

411 :デフォルトの名無しさん:2012/06/04(月) 21:37:26.28
0 + std::string("10") + std::string("100") == 110 // true
std::string("10") + std::string("100") == 10100 // true

529 :デフォルトの名無しさん:2012/06/30(土) 01:22:17.16
go langの型推論に感動した。
value := 0;
代入式にコロンつけりゃ推論してくれる
なぜC++もこの方式を導入しなかったんだ。

533 :デフォルトの名無しさん:2012/06/30(土) 03:42:26.61
autoあるしね

536 :デフォルトの名無しさん:2012/06/30(土) 16:46:55.89
>>533
autoじゃなくて、:=が良かったって話で。

547 :デフォルトの名無しさん:2012/06/30(土) 18:13:13.48
1言語狂信者が多いな、いつの間にRuby厨みたいなのが増えたんだ・・・

552 :デフォルトの名無しさん:2012/06/30(土) 18:22:44.85
いや一言語至上主義者が増えたな。
昔はC++関係は比較的そういう人が少ない傾向にあった。
複数の言語の中で気に入った言語があるのは良いことだが
他を排斥するようになったら終わりだ。

567 :デフォルトの名無しさん:2012/07/01(日) 21:53:08.56
>>529
そんなん、大昔の VB みたいにスペルミスのバグを防ぐために option explicit つけろってなるよ。
var value = 0; の方がずっといい。

568 :デフォルトの名無しさん:2012/07/01(日) 23:23:58.78
>>567
型推論と動的型付言語の違い分かってる?
VBのアレは、動的型付の禁止だぞ

572 :デフォルトの名無しさん:2012/07/03(火) 07:55:05.47
>>568
俺が何を言ってるのか分からないなら、
??option explicit スペルミス
でググってよ。
value := 0;
(略)
if ( hoge ) {
??valeu := 1;
}
のバグを見栄えで見つけるのが容易とは言い難いという話なんだけど。

575 :デフォルトの名無しさん:2012/07/03(火) 14:39:50.91
valu := 1; は auto valu = 1; ってことだろ
宣言なんだから

585 :デフォルトの名無しさん:2012/07/03(火) 20:02:01.05
scalaで型推論+自動変換でバリバリ持ち回られると激しく混乱してしまうのは
俺がバカなせい?

型推論使う時は明示的なキャストを、自動変換使う時は明示的な型宣言を
強制する方がソースコードは読みやすくなる気がするんだが・・・・・・

587 :uy ◆pdu1UZmweE :2012/07/04(水) 01:30:05.37
>>585
おめでとうございます
よく気づいたな

型推論(笑)をやっていったその先に何があるかというと
動的言語と同じ問題が静的言語でも発生するようになるだけだよ

型推論のせいでタイプ数は減っても、
情報が目に見えなくなるから、可読性が落ちるのもそのひとつ
a := "test"

~数百行~

b := a  ←型推論   bの型なんてわかりゃしねえ

b := bb
c := cc ッ手やるべき場所を

b := cc
c := bb ッ手やってもエラーは起きない
結局これなら中途半端に型推論とかやらないで最初から動的言語使っていたほうがいい
しかしこれから数年間は、変な奴らが型推論型推論あげまくってるから、この中途半端な概念のゴミカス型推論を使いまくった
超超ゴミッカスソースコードが量産されていくんだろうなwwww、そして10~20年後にソース引き継ぐ奴が涙目になるじゃんやったね

639 :デフォルトの名無しさん:2012/07/26(木) 13:53:33.08
本家のGoコンパイラは、C/C++とcalling convention違うからな。
奴らの特殊なCコンパイラ使わないとCのライブラリをリンクできない。
そしてC++のコンパイラはない。
だからwebkitとかC++のライブラリをGoにラップしてポートするのは大変。
悪い言語じゃないと思うが、これじゃ普及は厳しいだろう。

644 :デフォルトの名無しさん:2012/07/26(木) 22:57:53.81
>>639
とは言え実装他にないわけだし
大差なくね?

646 :デフォルトの名無しさん:2012/07/26(木) 23:35:20.60
>>644
意味がわからん
kwsk

648 :デフォルトの名無しさん:2012/07/27(金) 20:17:06.06
>>646
Cとリンクできるコンパイラーしかないんだから、
言語上インターフェースが特殊だろうと関係ないんじゃなかろうか?
厳密にはコンパイラーが一個しか無いわけじゃないけど
同じパッケージで配布されるから実質1ソフトでしょ

658 :デフォルトの名無しさん:2012/07/28(土) 22:15:55.80
constexpr関数の中に書けてコンパイル時にエラーを出す assert があればいいのに、無いね。

659 :デフォルトの名無しさん:2012/07/28(土) 22:21:49.51
>>658
http://stackoverflow.com/questions/8626055/c11-static-assert-within-constexpr-function

664 :デフォルトの名無しさん:2012/08/02(木) 00:22:52.14
pair や tuple で返ってくるのを、
auto (v1,v2,v3) = hoge();
みたいに受け取れないかな。要は多値だけど。

initializer_list じゃなくて、returner_list とか。

689 :デフォルトの名無しさん:2012/08/05(日) 10:29:28.39
ベクトルや複素数や行列のように、
まとまった一つの数と見なすものを除けば、
式の評価値が複数になることって、
数学的にも無い概念だから、
あまり複雑に考えないほうが良いよ。

694 :デフォルトの名無しさん:2012/08/05(日) 14:29:56.86
解が解の公式の答えの事言ってるなら
std::vectorでよくね。
x.size() == 0; //解なし
x.size() == 1; //解1個
x.size() == 2; //解2個

716 :デフォルトの名無しさん:2012/08/08(水) 07:37:15.99
20.7.2.2.1 shared_ptr constructors

template<class Y, class D> shared_ptr(Y* p, D d);
8. ...The copy constructor and destructor of D shall not throw exceptions.
 The expression d(p) shall be well formed, shall have well defined behavior,
 and shall not throw exceptions.

なので、例外投げる削除子を shared_ptr に使ってはいけない。

719 :デフォルトの名無しさん:2012/08/08(水) 08:31:48.50
>>716-717
削除子の呼び出しが例外を投げるかどうかじゃなくて、 712 が聞いてるのは
削除子のコピーが例外を投げるかどうか、だろ。その規定は関係ないよ。

738 :デフォルトの名無しさん:2012/08/13(月) 20:29:38.11
decltype(*this)
ってできないんだね
子クラスの型情報を親クラスで処理したかったのに


756 :デフォルトの名無しさん:2012/08/16(木) 21:26:02.82
$ cat sizeof.c
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('a'));
return 0;
}
$ gcc sizeof.c && ./a.out
4
$ g++ sizeof.c && ./a.out
1

面倒な・・・w



757 :デフォルトの名無しさん:2012/08/16(木) 23:22:01.11
http://www.bohyoh.com/CandCPP/FAQ/FAQ00004.html
C と C++ で違ったのかよ

761 :デフォルトの名無しさん:2012/08/17(金) 01:29:47.81
横からだけど初めて知ったわー
むしろCの方が何故intにしようと思ったんだろう


http://toro.2ch.net/test/read.cgi/tech/1333433900/l50/../人気ブログランキングへ

学ばないブログ
忍者AdMax
記事検索
最新コメント
QRコード
QRコード
  • ライブドアブログ