[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
803: 2017/07/02(日)23:51 ID:p749GQFM(3/3) AAS
>>797
すまん、1/3は1.0/3とか書くべきところだったな。
804: 2017/07/02(日)23:53 ID:1Me6IR2g(14/16) AAS
いやいやそこじゃなくて
805
(1): 2017/07/02(日)23:55 ID:1Me6IR2g(15/16) AAS
1.0/3.0*3.0 が 1.0にならないことがある
1/3*3 が 1にならない

小数演算特有ではない
806: 2017/07/02(日)23:59 ID:1Me6IR2g(16/16) AAS
0.1を10回足しても1にならないことがあるって言うのも小数特有ではない

0.1は普通のfloatやdoubleでは表現できず、コンパイル時に近似値に変換する
この意味では以下と本質的には同じ

int a = 0.1;
int b = a * 10;
807: 2017/07/03(月)00:01 ID:UYk8Gv77(1/2) AAS
>>792
自作って高価なプラモデルだぞ。。。
夢見過ぎ。
直接ってもなぁ。。。
昔はx86限定で直接レジスタ弄れる命令あったんだが、その命令は今じゃ優先的にレジスタ使ってね☆って意味に変質してるもんなぁ。。。
今のCは思ってるより下級言語じゃ無いぞ。
普通の言語よりゃハードに近いけどさ。
808: 2017/07/03(月)00:02 ID:Ds1QZZUB(1/5) AAS
doubleがintに比べて誤差が少ないため、誤差を気にせずに使ってしまいやすい

だから注意の意味を含めて誤差が大袈裟に語られる傾向がある

当然整数の方が(普通は)はるかに誤差が大きい
809: 2017/07/03(月)00:03 ID:NRAuceWo(1) AAS
>>805
それは知ってるけど元の質問者がdoubleの演算誤差について聞いているのだから、整数の除算の件は話が外れていると思う。
この手のスレに良くあることだけど、元の質問から勝手に話が発散して何を目的に議論しているのかが分からなくなるね。
810: 2017/07/03(月)00:04 ID:Ds1QZZUB(2/5) AAS
いやだから、

気を付けるべき点は >>769 の後半にまとめたつもりだけど
811: 2017/07/03(月)00:10 ID:Ds1QZZUB(3/5) AAS
よくやりがちな例は、

for (double a = 0; a <= 1 ; a += 0.1)

みたいな比較と

double a = sqrt(3);
double b = a * a;
int c = b;

みたいな整数丸め
812: 2017/07/03(月)00:12 ID:Ds1QZZUB(4/5) AAS
これは、
double に限らす10000桁精度の演算ライブラリでも全く同じ問題がほぼ同じ率で起こる
813: 2017/07/03(月)00:14 ID:Ds1QZZUB(5/5) AAS
前者はループが10回か11回かはバクチで、
後者はcが2になるか3になるかはバクチ
814: 2017/07/03(月)00:19 ID:UYk8Gv77(2/2) AAS
なんかそんなの読んだことあるな。
計算結果は精度の範囲内だけど、計算途中で精度超えて結果に誤差が出る的な。
なんか対策あったぞ。
815
(1): 2017/07/03(月)04:06 ID:yzYakBEJ(1) AAS
>>798
普通は計算機epsilonで判定は
しない、これはわかりました
じゃあどんな値で判定するんですか?
816: 2017/07/03(月)04:57 ID:BlNCaFmm(1) AAS
>>792
カーニハンもリッチーも受かっていないようだが?
817: 2017/07/03(月)08:32 ID:rvaVDuHz(1) AAS
>>815
対象の値が含み得る誤差を用いる。
機械イプシロン(を指数によってスケールしたもの)は誤差の下限を示しているだけに過ぎない。
818: 2017/07/03(月)11:17 ID:rWGDP/Vn(1) AAS
下限ではない
下限はその半分
819
(2): 2017/07/03(月)19:44 ID:BsrmCust(1) AAS
VisualC++とそれ以外用とで別の関数を用意して、プリプロセッサを使用してコンパイル時に選択したいと思っています
この場合、関数全体を#ifdef _MSC_VER〜#endifで囲うことになるのですか?
もう少しきれいな書き方があれば教えてください
よろしくお願いします
820: 2017/07/03(月)20:12 ID:oiFj/hKr(1) AAS
>>819
機種依存部分をライブラリ化してリンク時に差し替えるとか
821: 2017/07/03(月)20:21 ID:tl3oQzgh(1) AAS
関数全体を切り替えたいなら関数全体を複数記述するしかあるまい

部分的に違うだけならその違う部分的だけ切り替えればいい

関数全体を複数記述する方法はいくつかある
822: 2017/07/04(火)00:10 ID:2/r2iAfu(1) AAS
>>819
別にそれでいいじゃん。大量にあるならファイル分ければいいし
823
(2): 2017/07/04(火)09:38 ID:GKwjzP9N(1/2) AAS
class A {}
int main{
A a; //c++
A a = new A(); //c#
}
このc++の「A a;」は、c#の「A a = new A();」と同じ意味ということでいいんですか?
824
(2): 2017/07/04(火)10:10 ID:A8K7ipT2(1) AAS
>>823
同じになるねぇ
あえて違う点を挙げるとすればAが作成される領域がスタックかヒープか
でも意識するほどのことじゃない
825: 2017/07/04(火)10:53 ID:GKwjzP9N(2/2) AAS
>>824
スッキリしました。ありがとうございます。
826: 2017/07/04(火)12:24 ID:rriFyG5E(1) AAS
いやC++やるならスタックかヒープかは意識しなきゃだめだろ
deleteどうすんの
827: 2017/07/04(火)12:53 ID:Tv7aUxog(1) AAS
>>824
> Aが作成される領域がスタックかヒープか
いや、それは意識しろよ
828: 2017/07/04(火)16:07 ID:BdJEhj1W(1) AAS
ヒープはC#の方だろ、とりあえず意識しないでも
829
(1): 2017/07/04(火)17:16 ID:RU97axJ4(1) AAS
C#はdelete書かないんだからC++なら
deleteが不要な「A a;」を同等と捉えるのが筋
配置場所なんかどうでもええ
830: 2017/07/04(火)18:37 ID:eP5xPbfu(1) AAS
newだとスコープ抜けても残るんじゃ?
831: 2017/07/04(火)18:44 ID:xAcMjOR1(1) AAS
C#だとスマポみたいになるんかね
832: 2017/07/04(火)19:56 ID:3bDdeHlE(1) AAS
c#はGC管理、classは参照型
833: 2017/07/04(火)20:17 ID:olJiM2Cb(1/5) AAS
>>829
寿命が全然違うじゃないですかぁ
834: 2017/07/04(火)20:31 ID:L7t36fm1(1) AAS
コストも
835: 2017/07/04(火)21:02 ID:V6j6UQbw(1) AAS
で?
836: 2017/07/04(火)21:52 ID:+pBAjacr(1) AAS
すげえ考え方の奴が出てきてワロッシュ
837
(1): 2017/07/04(火)22:13 ID:kiqPrlXB(1/3) AAS
寿命だのコストだの言うけど
そんな実相依存どうやって見積もるの?
無意味な揚げ足取りはやめたら?
838: 2017/07/04(火)22:14 ID:VwPftttd(1/3) AAS
え?
839: 2017/07/04(火)22:17 ID:TrkY+sIz(1/2) AAS
C++ 側は実装依存な部分あるっけ? C#側はよーわからんけど
840: 2017/07/04(火)22:19 ID:dCdz+uzl(1) AAS
こっちはC++スレだぞ?C++でスタックとヒープのコストや寿命の違いを意識する必要がないってマジでいってるのかよ
841: 2017/07/04(火)22:29 ID:kiqPrlXB(2/3) AAS
newの方はC#のって前置きがあるだろうが
よく読め
まあ元々の質問もあれだが
842
(2): 2017/07/04(火)22:42 ID:IS9gvNe4(1) AAS
コストは
c++のnew>>(超えられない壁)>>c#のnew>スタック
全然違うというほどでもないし
843: 2017/07/04(火)23:02 ID:olJiM2Cb(2/5) AAS
コストは置いておいたとしても寿命はどうするんだよ

平たく言うと
「マニュアル車の1速は、オートマ車のDと同じ意味ですか?」
って質問だぞ
それに対して
「オートマ車はDで発進するからマニュアル車なら1速と同等ととらえるのが筋
 速度が出た後のことなんかどうでもええ」
ってのはなんか違うだろ

メモリ管理に関してはC++はマニュアルでC#はオートなんだから
こういうたとえになるんだよ
844: 2017/07/04(火)23:10 ID:VgVQ93XC(1) AAS
>>837
おまいさん資格持ちじゃないよな?な?な?
845
(1): 2017/07/04(火)23:15 ID:olJiM2Cb(3/5) AAS
あと、C#はJavaと違って構造体が使えてこれは値型になれるから
スタックに確保できる
なんで、C++の A a; はどちらかというと、そちらに該当するんだよ

で、C#のA a = new A(); はというと
delete が必要という一点を除けば C++ の A *a = new A();に相当するんだよ
こんなこと当たり前だろ
846: 2017/07/04(火)23:23 ID:9HpxJyun(1) AAS
>>845
実装と目的を一緒にすんなよタコ
単に「Aのインスタンス生成するコード書いてみ」
といわれたら>>823になるだろjk
意味が同じってのはそういうこった
847: 2017/07/04(火)23:33 ID:AVhuZxl1(1/4) AAS
>>842
えっ???
そんな馬鹿な
848: 2017/07/04(火)23:38 ID:olJiM2Cb(4/5) AAS
>単に「Aのインスタンス生成するコード書いてみ」

ってのはお前が勝手に言ってることだろ

元は
>このc++の「A a;」は、c#の「A a = new A();」と同じ意味ということでいいんですか?

849
(1): 2017/07/04(火)23:38 ID:AKPIjSm8(1) AAS
超えられないかはともかく、newに限って言えばGC言語の方が低コストでもおかしくない。
850
(1): 2017/07/04(火)23:39 ID:kiqPrlXB(3/3) AAS
厳密にどうかじゃないんだよ
初心者がこれから言語を勉強していくのに
より得になる方はどっちだってことよ

GCだからー、ヒープだからーって
そんな答えおよびじゃないっつーの
851: 2017/07/04(火)23:40 ID:AVhuZxl1(2/4) AAS
実際に試してから言えよ
852: 2017/07/04(火)23:40 ID:AVhuZxl1(3/4) AAS
>>842
>>849
853: 2017/07/04(火)23:43 ID:olJiM2Cb(5/5) AAS
どの程度の初心者かわからないだろ
C#と比べてるってことは既にC#をそこそこマスターしているかもしれないだろ
その状態でC++に手を出そうとしていたとしたら、どうだ?
C#とC++の違いなどを書いたほうが良いだろ
854: 2017/07/04(火)23:46 ID:tvZqc0j8(1) AAS
>>850
初心者だからこそ、上っ面の文法の違いだけで捉えて、こうすればだいたい同じとか説明する前に、
前提としてメモリ管理の考え方が違うことを理解してもらうのは重要だろう。
855: 2017/07/04(火)23:47 ID:AVhuZxl1(4/4) AAS
違うものは違う
856
(2): 2017/07/04(火)23:48 ID:VwPftttd(2/3) AAS
もういいよ、まとめると

C++ではインスタンス生成(アドレスの決定)は二種類のやり方がある
A a;
A* pa = new A();
前者はスタックのアドレスが割り当てられ、後者は通常はヒープのアドレスが割り当てられる。
前者はスコープが寿命で、後者はdelete pa;されるまでが寿命。

C#ではインスタンス生成の方法は値型、参照型でそれぞれ一種類ずつしかなく、
A a; //struct A
B b = new B(); //class B
前者はスタックのアドレスが割り当てられ、後者はヒープのアドレスが割り当てられる。
省3
857: 2017/07/04(火)23:50 ID:TrkY+sIz(2/2) AAS
C# の後者の寿命は? delete pa は C++ だよね
858: 2017/07/04(火)23:53 ID:VwPftttd(3/3) AAS
>>856
おっと、間違えた
C#の後者の寿命はGCに回収されるまででした
859: 2017/07/05(水)00:46 ID:EyHtcvE8(1) AAS
>>856
ご苦労さん

何故この話題がここまで伸びたんだろ
860
(1): 2017/07/05(水)22:56 ID:UhWlQCq1(1) AAS
異なる考えの言語同士であるため対応が自明でないという事実を無視して
自分の考える「同じ意味」の解釈を押し付けるからに相違ない

>C#ではインスタンス生成の方法は値型、参照型でそれぞれ一種類ずつしかなく、
>A a; //struct A
なるほどこうやって言語仕様を確認せず想像をたれ流すので世の中が嘘だらけになるのだな
861
(1): 2017/07/05(水)23:29 ID:0KIeSgEp(1) AAS
>>860
ん、C#のほうはそれであってるだろ
StringとかDateTimeみたいな一部の例外を除けば
862
(1): 2017/07/06(木)01:22 ID:AOJFjP+S(1) AAS
>異なる考えの言語同士であるため対応が自明でないという事実を無視して
>自分の考える「同じ意味」の解釈を押し付けるからに相違ない

ん?だからそれに基づいてほとんどの人は
「違う意味だよ〜」って言ってたんじゃなかったの?
一部の人が「同じような意味だよ〜」って言ってただけで
それに反論する流れだったでしょ
だから「同じ意味」の解釈の押し付け合いはしてなくて
同じ意味だよ vs 違う意味だよ
だったと思うけど
863: 2017/07/06(木)05:15 ID:5a/RGiY/(1) AAS
わざわざ堅苦しい言葉選んで俺偉いアピール
864: 2017/07/06(木)05:29 ID:T7F4pxe5(1) AAS
同じ様な意味と同じ意味は違う
さらっと言葉をすり替えるなよ
まったく卑怯な奴よの
(つーか同じ様な意味とも言っていない)
865: 2017/07/06(木)08:09 ID:TSgBvSRK(1/3) AAS
>>862
>だから「同じ意味」の解釈の押し付け合いはしてなく
「同じ意味」の基準について合意していないのに「ここが違うから別」とだけ言うのは「同じ意味」の解釈の押し付けに他ならないと思うのだが、
もう少し日本語の字面でなく意味を理解した方がよいのではないか

>「違う意味だよ〜」って言ってたんじゃなかったの?
 →Yes
>同じ意味だよ vs 違う意味だよだった
 →Yes
866: 2017/07/06(木)08:11 ID:rcg+ZZ7N(1) AAS
違うものは違う
867
(1): 2017/07/06(木)08:12 ID:TSgBvSRK(2/3) AAS
>>861
合っているかと訊かれれば合っていないので、言語仕様を読むか当該のスレッドで訊くのが良いのでは
あとStringやDateTimeの例外というのが何なのかよくわからなかった
868: 2017/07/06(木)08:18 ID:QfwLuwwY(1) AAS
>>867
合ってるから消えろ
外部リンク:docs.microsoft.com
869: 2017/07/06(木)14:54 ID:m/Ia1fy1(1) AAS
まだやってんのかよ
おまいらのこだわりはスゲェな
870
(1): 2017/07/06(木)22:06 ID:TSgBvSRK(3/3) AAS
リンク先を見て思ったのだが
こだわりじゃなくて罵られることに喜びを覚えるマゾなのではないかと言う気がした
871: 2017/07/06(木)22:08 ID:JPWXM8i2(1) AAS
>>870
正しく指摘できないのならレスしないほうがいい
あなたの思ういちばんすこいC#の仕様の世界で生き続けてくだはい
アーメン
872: 2017/07/07(金)11:58 ID:C1hAccX9(1) AAS
俺は、プログラミングなんて存在しない世界で生きたい
873: 2017/07/07(金)12:21 ID:2bQkb9bH(1) AAS
生まれてくるのが100年くらい遅かったようだな
874: 2017/07/07(金)12:21 ID:xvg52mfm(1) AAS
プログラマ辞めれば良いだけやん。
875
(1): 2017/07/07(金)13:29 ID:1UwaMcEr(1/2) AAS
c++
英語を読める
btcをトレードしたことがある

仮想通貨の開発に参加してみたい方
レスをお願いします
876
(1): 2017/07/07(金)15:01 ID:u5D8E4qs(1) AAS
>>875

んで?どうすりゃええの
877: 2017/07/07(金)16:03 ID:1UwaMcEr(2/2) AAS
>>876
お返事ありがとうございます

通貨名
raiblocks

simple
instant
fees 0(送金手数料がかからない)

web
外部リンク:raiblockscommunity.net

slack
省3
878: 2017/07/08(土)21:39 ID:dFvfrYOE(1) AAS
プログラミングなんて底辺ドカタの仕事
そのうちAIがやれるようになる
879: 2017/07/08(土)22:33 ID:lbAgDi9M(1) AAS
アドバイスさんくす
880
(5): 2017/07/09(日)16:06 ID:EeQkMvgZ(1/4) AAS
ポインタそのものにオブジェクトってできるんでしょうか?
例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
int array[3];
int *p = array;
int **pp = &p;
for(i = 0; i < 3; i++)
{
printf("&array[%d] : %d : %d\n", i, &array[i]);
}
&array[0] : 2293472
省11
881
(2): ◆QZaw55cn4c 2017/07/09(日)16:13 ID:VF1qtZ3L(1) AAS
>>880
その出力を一挙に得られるプログラムを示せ,アドレスはプログラムの実行ごとに変わる可能性がある
882
(1): 2017/07/09(日)16:20 ID:v/7piv3Y(1) AAS
>>880
pとarrayは異なるオブジェクトだから確認方法が間違ってる
883
(1): 2017/07/09(日)16:25 ID:3Luqddjj(1/3) AAS
一つのポンタを複数のオブジェなんて当たり前
int z;
int * p = &z;
int * p2 = p;
int * p3 = p2;
884: 2017/07/09(日)16:43 ID:EeQkMvgZ(2/4) AAS
>>881 これでいいでしょうか?
int i;
int array[5];
int *p = array;
int **pp = &p;
printf("array : %d\n", array);
for(i = 0; i < 5; i++) {
printf("&array[%d] : %d\n", i, &array[i]);
}
printf("p : %d\n", p);
省11
885
(1): 2017/07/09(日)16:44 ID:3Luqddjj(2/3) AAS
何がわからんのや。ようわかるやんけ

アドレス : オブジェクト : 値 : オブジェクトの型
2293464 : pp : 2293468 : int**型
2293468 : p : 2293472 : int*型
2293472 : array[0] : ? : int型
2293476 : array[1] : ? : int型
2293480 : array[2] : ? : int型
886
(1): 2017/07/09(日)16:51 ID:EeQkMvgZ(3/4) AAS
>>885
つまりポインタpは配列を参照してもp自体は配列型ではなくて単体(?)のオブジェクトだということでしょうか?
887
(1): 2017/07/09(日)16:56 ID:3Luqddjj(3/3) AAS
>>886
もちろんや。
pはarrayとは別のアドレス2293468にある
int*型の独立したオブジェやで
888: 2017/07/09(日)17:01 ID:EeQkMvgZ(4/4) AAS
>>887
ありがとうございます!5時間以上つまってたのが一気にクリアになりました!
889
(1): 2017/07/09(日)17:16 ID:Uu/MlKNR(1) AAS
>>880
> &pp[0] : 2293468
これはpのアドレス
> &pp[1] : 2293472
> &pp[2] : 2293476
pp[1], pp[2]は存在しないからアクセスしちゃダメ
たぶん
2293464: pp
2293468: p
2293472: array[0]
省3
890
(1): 2017/07/09(日)22:31 ID:WeAgIUgc(1) AAS
>>889
意味のある値が取れないだけで
別にアクセスしても問題ねーだろ
891: 2017/07/09(日)23:28 ID:1po+7Ikw(1) AAS
>>890
正しく割り当てられたオブジェクトのアドレス以外を指しているのなら、アクセスしてはいけないだろう。
889の例ではたまたまpp[1]が表す位置がスタック上の有効なアドレスでアラインメントも問題無いだろうけど、
例えばppがスタックやヒープの末端のオブジェクトを指していたら、pp[1]にアクセスしたらNGということもある。
892: 2017/07/10(月)06:50 ID:ZgtWUD/x(1/3) AAS
中身にアクセスしてなくてただのアドレス計算だぞ

C/C++言語的にはNGだけど、それで例外が発生するとはなかなか考えにくい
もしかしたらビルド時に警告を出してくれるかも
893: 2017/07/10(月)06:54 ID:t9ouoliu(1) AAS
アドレス計算自体はOKだと思うよ。
894
(4): 名無しさん@そうだ選挙に行こう! Go to vote! 2017/07/10(月)07:04 ID:Ols/UzwR(1) AAS
配列ならば確保した数+1までのアドレス計算はやっても大丈夫&整合がとれる位置に配置されている
895: 名無しさん@そうだ選挙に行こう! Go to vote! 2017/07/10(月)07:05 ID:ZgtWUD/x(2/3) AAS
無効エリアのアドレス計算
値不定か動作不定かどっちだか忘れた

これらをOKと呼ぶならOKなんでしょう
896: 名無しさん@そうだ選挙に行こう! Go to vote! 2017/07/10(月)07:13 ID:ZgtWUD/x(3/3) AAS
>>894
-1も有効だとうれしい事があるけど、-1はダメなんだよね
897
(1): 2017/07/10(月)22:27 ID:WIOZS2V0(1) AAS
>>894
つまり式「&pp[1]」は大丈夫でないと?
898
(1): 2017/07/11(火)13:12 ID:eWIFW1BW(1) AAS
ppは配列じゃないだろ
899
(1): 2017/07/11(火)18:17 ID:L5b0rMHK(1) AAS
これがアスペいうやつだな
 配列でないオブジェクトも要素数1の配列として考える仕様→よくご存知で
 pは配列じゃないからな→わかる
 ppは配列じゃないからな→頭悪いな
 ppは配列じゃないだろ→アスペ
900: 2017/07/11(火)20:17 ID:gS+YojZ9(1/2) AAS
ん?まったくよくわからんのだが、だれか解説して

>配列でないオブジェクトも要素数1の配列として考える仕様
↑まずこれがよくわからない
配列じゃないオブジェクトといえば、例えばint i;などは配列としては扱えないよね

で、下二行の意味も分からない
901
(1): 2017/07/11(火)22:08 ID:qjau/h5c(1/3) AAS
配列かどうかは関係なく、オブジェクトの後ろのアドレスは計算も出来るし比較も出来る
902: 2017/07/11(火)22:10 ID:qjau/h5c(2/3) AAS
>>894は配列じゃない場合に関しては何も言ってないから間違いではないが
わざわざ配列と書いてるので配列以外は違うと思ったかわからなかったか
だろう
1-
あと 100 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.001s*