質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

9回答

5244閲覧

4×4の行列を算出したい

txty

総合スコア298

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

2クリップ

投稿2020/07/03 10:41

編集2021/03/09 12:34

float型だと手計算と一致せず、double型だと手計算と一致したのでdouble型にしました。
でも、三回目の計算がまったくあたらないので注意です。

後、計算が遅いです。

数値は、なんでも言いわけではなさそうだった。で、現状方程式で解いてる。(3Dグラフィックスのための数学では普通に4x4の計算をしている。)

c

1double a[16]={ 21.000000,0.000000,0.000000,0.000000, 30.000000,1.000000,0.000000,0.000000, 40.000000,0.000000,1.000000,0.000000, 50.000000,0.000000,0.000000,1.000000}; 6 7 8double[16]={ 91.000000,0.000000,0.000000,0.000000, 100.000000,1.000000,0.000000,0.000000, 110.000000,0.000000,1.000000,0.000000, 120.000000,0.000000,0.000000,1.000000}; 13

で数値は何でもいいとして
**a×bの
4×4の行列(間違えたら嫌なので強調)**を算出する簡単な方法がありましたら、教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/08/02 23:01

> 作らないやつは、他人をあれこれ評価できる権利ないっていってんだよ。 「作らない」はこの文脈では「回答しない」と読めますが、誰がそんなことを決めましたか? 質問者にはそれを決める権利はありません。 決める権利は運営が持っています。 現状、回答しなくても評価できるシステムになっていますし、それは合理的です。評価によって質問・回答がブラッシュアップされ、資産価値が増すからです。 むしろ回答しなければ評価できないシステムの方が不合理です。
episteme

2020/08/02 23:57

質問者は最も「作らないやつ」であるが。
Zuishin

2020/08/09 01:54

解決済みなのになぜまだやってるのかわかりませんが、どうせ編集するなら評価するひと云々というところもついでに削除したらいいと思います。
txty

2020/08/09 02:02

まだやってた。だってわけわかんなくて解けないし。 >どうせ編集するなら評価するひと云々というところもついでに削除。 そんな気になりますか。
Zuishin

2020/08/09 02:05

そりゃ通知が来たらどこが変わったか読むし、その時にゴミがいつまでも残ってたら気になるでしょう。 解けないなら解決済みにしなければ良かったと思いますが、なぜあの回答をもらって解けないのかわかりません。そのまま答えじゃないですか。
Zuishin

2020/08/09 02:06

で、人に尋ねる気がないなら編集せず一人で解けばいいんですよ。尋ねる気があるなら余計な憎まれ口は叩かず素直に聞けばいいと思いますね。
txty

2020/08/09 02:22 編集

正論ですが、外した途端にDOS攻撃みたいになったら嫌なので、お守りみたいなものです。ここでは保守?みたいなものでいます。
Zuishin

2020/08/09 02:27

その文言があるから書かないというおとなしい人は DOS 攻撃をしません。
txty

2020/08/09 02:32

どうだかわからないから、とりあえずはずしません。すいません。
Zuishin

2020/08/09 02:36

はずさないことで、この質問を見た人からあなたへの対応が親切でなくなることはあると思いますが、それもどうだかわからないと言うなら好きにすればいいと思います。ただ、それなら回答は期待しないことです。一人でどうぞ。 あまりしつこく無意味な通知を送ってくるなら、暑くてイライラしがちな季節なので、送られた人の態度もあまり良くない方向へと変化するかもしれませんね。
txty

2020/08/09 02:41

はい、あとはひとりでって方向にします。もう当初、欲しかったものは手に入ったので静かにしてます。
guest

回答9

0

Frame_Scene_Root[0]とFrame_body[0]がfloat型にできなかったんだが、元の値が変わってしまうのですがどうすべきでしょうか。

なに言ってるかわからん。

投稿2020/07/04 00:12

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2020/07/04 00:23

float型ではなく、const float にしたら元のデータfloat Frame_Scene_Root[16]とfloat Frame_body[16]はポインタからの影響をうけないでしょうか。
episteme

2020/07/04 00:25

"ポインタからの影響"とは何だ?
txty

2020/07/04 00:34

この場合、何も影響はうけませんけど 引数で引き込んだポインタの値に何か書き込んだら元のデータはくるってしまうと思います。それを防ぐためにconst *float と書けばいいか、わかりません。元のデータを守るのにはconst float * と書くのが正しいのですか
episteme

2020/07/04 00:37

Ranks(temp, a, b) が a,bの内容を書き換えないことを表現したいなら void Ranks( float *temp , const float* a, const float *b) { ... }
txty

2020/07/04 00:41

疑問に思ってました。返信で const float* 型について確信がもてました。今度から使います
episteme

2020/07/04 00:45

void Ranks( float *temp , const float* a, const float *b) { a[0] = 0; } をコンパイルしてみるといい。エラー吐いてくれるから。
txty

2020/07/04 01:20 編集

main.cc: 関数 ‘void Ranks(float*, const float*, const float*)’ 内: /main.cc:40:7: エラー: 読み取り専用位置 ‘* a’ への代入です a[0]=0; ^ 確かにエラーです。明示てきでした。
guest

0

a×bの 4×4の行列(間違えたら嫌なので強調)を算出する簡単な方法がありましたら

何らかのライブラリを使う,という方法.(マジレス)

一体何のために行列計算しているのかわからないけれども,その行列を使う目的によっては何らかのライブラリを導入している可能性があり,そうであって且つそこに行列を扱う機能が提供されているならばそれを使うのが手っ取り早い.

OpenCVとかEigenなら,行列用の型にoperator *が提供されているから,
A * Bとか書けばそれで済む.
OpenGLにはglMultMatrixなんてのがあるみたい(掛ける方向とか行列データの並び順とかの面が若干面倒そうかもだが).

投稿2020/08/03 01:28

fana

総合スコア11664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2022/08/15 14:31 編集

double型にしました。
guest

0

評価する人は自前に 4*4のコードを作成し書き込んでいけっていったんだから、書き込んでいけよ。

php

1 2<?php 3$intA = [ 43, 4, 5, 5, 56, 3, 4, 3, 63, 4, 5, 7, 79, 2, 3, 4 8]; 9 10$intB = [ 113, 4, 5, 5, 126, 3, 4, 3, 133, 4, 5, 7, 149, 2, 3, 4 15]; 16 17$result = []; 18 19for( $i = 0; $i < 16; $i++ ){ 20 $result[] = $intA[$i] * $intB[$i]; 21} 22 23for( $i = 0; $i < 4; $i++ ){ 24 for( $j = 0; $j < 4; $j++ ){ 25 echo $result[ ($i * 4) + $j ], ' '; 26 } 27 echo '<br />'; 28} 29

もうすぐ定期試験2科目始まるのでレスは遅れますが悪しからず。

投稿2020/08/03 00:51

編集2020/08/03 00:52
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2022/08/15 14:31 編集

double型にしました。
guest

0

ベストアンサー

簡単もなにもベクトルの内積を4x4回繰り返す以外なんかあるん?

[追記] 愚直な実装でよければ:

C

1#include <stdio.h> 2 3#define at(t,y,x) t[y*4+x] 4 5int main() { 6 float a[16] = { 7 1.000000,0.000000,0.000000,0.000000, 8 0.000000,1.000000,0.000000,0.000000, 9 0.000000,0.000000,1.000000,0.000000, 10 0.000000,0.000000,0.000000,1.000000 }; 11 12 float b[16] = { 13 1.000000,0.000000,0.000000,0.000000, 14 0.000000,1.000000,0.000000,0.000000, 15 0.000000,0.000000,1.000000,0.000000, 16 0.000000,0.000000,0.000000,1.000000 }; 17 18 float c[16]; 19 20 int row, col; 21 for ( row = 0; row < 4; ++row ) { 22 for ( col =0; col < 4; ++col ) { 23 float sum = 0.0f; 24 int t; 25 for ( t = 0; t <4; ++t ) { 26 sum += at(a,row,t) * at(b,t,col); 27 } 28 at(c,row,col) = sum; 29 } 30 } 31 32 // できたかな? 33 for ( row = 0; row < 4; ++row) { 34 for ( col = 0; col < 4; ++col) { 35 printf("%f ", at(c,row,col)); 36 } 37 puts(""); 38 } 39 return 0; 40}

投稿2020/07/03 11:32

編集2020/07/03 12:22
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2020/07/03 11:40

c++のライブラリになにかあるのか探りたかったのと,ポインタで引数から引きずり込む方法しかしらないのとreturn 文 つかったら関数の掛け算で何回も繰り返せるかなとおもったけど、ポインタで引きずりこむほうほうしかしらないのでint で普通に一次元でいれるとき 引数はどうなるかと思いました。
episteme

2020/07/03 11:41

申し訳ないが日本語で頼む。
txty

2020/07/03 11:46 編集

float型で関数を使るとき、一次元の配列の引数はどうなりますか。
txty

2020/07/03 12:00

要は関数の中身をつくるのがめんどくさかっただけで、もう私のSAN値が足りないということです。
episteme

2020/07/03 12:10

丸投げ了解。追記した。
txty

2020/07/03 12:26

凄いな。どうも。
guest

0

解決したんじゃなかったんか?

a[4][4] と b[4][4] の積を c[4][4] に求める:

C

1#include <stdio.h> 2 3void multiplies(float c[4][4], const float a[4][4], const float b[4][4]) { 4 int row, col; 5 for ( row = 0; row < 4; ++row ) { 6 for ( col =0; col < 4; ++col ) { 7 float sum = 0.0f; 8 int t; 9 for ( t = 0; t <4; ++t ) { 10 sum += a[row][t] * b[t][col]; 11 } 12 c[row][col] = sum; 13 } 14 } 15} 16 17int main() { 18 float a[4][4] = { 19 { 1.000000,0.000000,0.000000,0.000000 }, 20 { 0.000000,1.000000,0.000000,0.000000 }, 21 { 0.000000,0.000000,1.000000,0.000000 }, 22 { 0.000000,0.000000,0.000000,1.000000 }, 23 }; 24 25 float b[4][4] = { 26 { 1.000000,0.000000,0.000000,0.000000 }, 27 { 0.000000,1.000000,0.000000,0.000000 }, 28 { 0.000000,0.000000,1.000000,0.000000 }, 29 { 0.000000,0.000000,0.000000,1.000000 }, 30 }; 31 32 float c[4][4]; 33 34 int row, col; 35 36 multiplies(c, a, b); 37 38 // できたかな? 39 for ( row = 0; row < 4; ++row) { 40 for ( col = 0; col < 4; ++col) { 41 printf("%f ", c[row][col]); 42 } 43 puts(""); 44 } 45 return 0; 46}

投稿2020/08/02 23:51

編集2020/08/02 23:55
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2020/09/19 07:15

double型にしました。
episteme

2020/09/19 08:42

それがなにか?
txty

2020/09/19 09:39 編集

精度があがるって思ったんですが、floatだと,84.41812の値がでてしまうのですが、doubleだと、84.410817で電卓の計算と同じくなるのでdouble型の方がいいと思いました。ただ2回目の計算はいいとして3回目の計算が全くあたらない。なぜあたらないのかわからないです。自分の計算式の方ですけど、とくに代入してるわけじゃないのでそのまま使えるのではないかと思い試しました。ただ3*3の計算を必要としているという可能性もありますが。
episteme

2020/09/19 10:08

2回目とか3回目とか、なんのととやらわからんです。 ※ 平行移動で掛けるベクトルは (x,y,z,1) じゃね?
txty

2020/09/19 10:59 編集

A*BはどちらがAかどちらがBか考慮してないです あと、そこまで理解が至らなかったです。たぶんそうです ただそこまで試す馬力がないです。(転置は必要かとか方程式になるかとか) double Keka[16]; double Frame_Scene_Root[16]={ 1.000000,0.000000,0.000000,0.000000, 0.000000,1.000000,0.000000,0.000000, 0.000000,0.000000,1.000000,0.000000, 0.000000,0.000000,0.000000,1.000000}; double Frame_body[16]={ 1.278853,0.000000,0.000000,0.000000, 0.000000,0.000000,1.123165,0.000000, 0.000000,-1.470235,0.000000,0.000000, 0.135977,2.027985,133.967667,1.000000 }; double Frame[16]={ 1.000000,-0.000000,-0.000000,0.000000, -0.000000,1.000000,0.000000,0.000000, -0.000000,0.000000,1.000000,0.000000, -0.142114,0.000023,-49.556850,1.000000 }; double Bip01_R_UpperArm_FrameTransformMatrix[16]= { 0.532891,0.645602,0.547015,0.000000, -0.380503,0.760229,-0.526564,0.000000, -0.755807,0.072461,0.650772,0.000000, 31.000195,-0.000004,0.000004,1.000000 }; /* double Bip01_R_UpperArm_FrameTransformMatrix_offet[16]= {-0.941743,-0.646748,0.574719,0.000000, -0.283133,-0.461979,-0.983825,0.000000, 0.923060,-1.114919,0.257891,0.000000, -65.499557,30.497688,12.852692,1.000000 };*/ multiplies(&Frame_Scene_Root[0],&Frame_body[0],&Keka[0]);----1回目 multiplies(&Keka[0],&Frame[0],&Keka[0]);----2回目 multiplies(&Keka[0],&Bip01_R_UpperArm_FrameTransformMatrix[0],&Keka[0]);--------3回目です。一応。 関数の中にprintfいれました。 3回目で電卓の計算と全然合わない数値が吐かれます。どこかおかしいでしょうか。関数の名前だけ変えました。もうしょうがないけど。
txty

2020/09/19 12:05

double f[16]; multiplies(&Keka[0],&Bip01_R_UpperArm_FrameTransformMatrix[0],&f[0]); printf("解2%f %f %f %f\n",f[0],f[1],f[2],f[3]); printf("%f %f %f %f\n",f[4],f[5],f[6],f[7]); printf("%f %f %f %f\n",f[8],f[9],f[10],f[11]); printf("%f %f %f %f\n",f[12],f[13],f[14],f[15]); ならだいたいうまくいくみたいだけど、なんかルールあるんですか。 あとdouble 型でも誤差でるみたい。過剰だった。
episteme

2020/09/19 13:09

行列の積は A*B ≠ B*A だから > A*BはどちらがAかどちらがBか考慮してないです は致命的。
txty

2020/09/19 13:30 編集

どうやって調べましょう?逆かどうかは、わからないので、そこまではサポートできてないです。。行列の内積がただしいかまでは明らかにしたいです。(仮に、新しくできたA*新たにでてきたB,結果で統一しました。)
txty

2020/09/19 15:07

あと、※ 平行移動で掛けるベクトルは (x,y,z,1)をどうやって使うのでしょうか。
episteme

2020/09/19 16:10

ごめんなさい、なにがわからんのかさっぱりわからんです。
txty

2020/09/19 17:00

1.multiplies(&Keka[0],&Bip01_R_UpperArm_FrameTransformMatrix[0],&Keka[0]);の引数に2回&Keka[0]することは、ただしいでしょうか。自分では正しくない値がでてくるので引数に問題があるのかなと思いました。引数を同じ&Keka[0]にしていいか、わからないです。 2.試してないので推論ですが、行列に掛けるベクトル(x,y,z,1)は有効じゃないかなと思いました。 ただスキニング行列の計算はできないですが。スキニング行列を取得してそのあと、どうすればいいかはさっぱりです。
episteme

2020/09/19 18:35

1. 誤りです。 2. 問いではないので答えません。
txty

2020/09/20 02:16 編集

1.はなぜ誤りなんでしょうか。今までこのように書いたことはないけど、私は理論上できることはなんでもなんでもやってしまうので、問います。
episteme

2020/09/20 02:56

そんな使われ方を想定していません。コード読んでください。
txty

2020/09/20 03:52 編集

すいません。自分のコードです。このコード使ってます。printfは見苦しかったので消しました。 やはり、&Keka[0],&Bip01_R_UpperArm_FrameTransformMatrix[0],&Keka[0]の&Keka[0]が駄目なんでしょうか。 void multiplies(double* a, double *b,double *temp)←(引数で駄目なのですか。) { temp[0]=a[0]*b[0]+a[1]*b[4]+a[2]*b[8]+a[3]*b[12];//ok temp[1]=a[0]*b[1]+a[1]*b[5]+a[2]*b[9]+a[3]*b[13];//ok temp[2]=a[0]*b[2]+a[1]*b[6]+a[2]*b[10]+a[3]*b[14];//ok temp[3]=a[0]*b[3]+a[1]*b[7]+a[2]*b[11]+a[3]*b[15];//ok temp[4]=a[4]*b[0]+a[5]*b[4]+a[6]*b[8]+a[7]*b[12];//ok temp[5]=a[4]*b[1]+a[5]*b[5]+a[6]*b[9]+a[7]*b[13];//ok temp[6]=a[4]*b[2]+a[5]*b[6]+a[6]*b[10]+a[7]*b[14];//ok temp[7]=a[4]*b[3]+a[5]*b[7]+a[6]*b[11]+a[7]*b[15];//ok temp[8]=a[8]*b[0]+a[9]*b[4]+a[10]*b[8]+a[11]*b[12];//0k temp[9]=a[8]*b[1]+a[9]*b[5]+a[10]*b[9]+a[11]*b[13];//0k temp[10]=a[8]*b[2]+a[9]*b[6]+a[10]*b[10]+a[11]*b[14];//0k temp[11]=a[8]*b[3]+a[9]*b[7]+a[10]*b[11]+a[11]*b[15];//0k temp[12]=a[12]*b[0]+a[13]*b[4]+a[14]*b[8]+a[15]*b[12];//0k temp[13]=a[12]*b[1]+a[13]*b[5]+a[14]*b[9]+a[15]*b[13]; temp[14]=a[12]*b[2]+a[13]*b[6]+a[14]*b[10]+a[15]*b[14]; temp[15]=a[12]*b[3]+a[13]*b[7]+a[14]*b[11]+a[15]*b[15]; } 問2ですが方程式でもスキニングできると思いなおしましたが、2回目の試行で、qx=qx+0.135977 qy=qy+2.027985 qz=qz+133.967667や+2.027985で画面からフェードアウトします。0.01単位でオブジェクトが結構移動してしまうんですが133.967667でどこかにいってしまいます。2は問ではないです。
episteme

2020/09/20 05:40 編集

そのコードならダメなのは明らかやん。自分で書いたのが読めません? # とっくの昔に解決したんじゃなかったんかい...
txty

2020/09/20 08:01 編集

すいません。駄目な理由を教えてもらってよろしいでしょうか。中で変数の値も変えてないのでいけると思ったのですが。。ご指摘ください。
episteme

2020/09/20 08:50

あなたのコード中に現れる temp[~] を a[~](またはb[~]) に置き換えたのと同じことになりますから、 そりゃダメでしょうよ。代入によってa[~](またはb[~]が書き換わるんだから。
txty

2020/09/20 09:08 編集

回答ありがとうございます。すいません。自分が間違ってるのは手計算から明らかですが、1回目、a[]とb[]は代入してない。使ってるだけ。temp[]はかきかわっていい。2回目、(仮)に、a[]は1回目のtempの値(書き変わらない)、b[]は新しい数値、temp[]を再利用して結果を求めると考えていますが、間違えているのですか。
episteme

2020/09/20 09:28

ごめんなさい、なにがわからんのかわからんです。
txty

2020/09/20 09:34

>念のため、代入によってa[~](またはb[~]が書き換わるんだからとはいつの時点ですか。 >2回目、(仮)に、a[]は1回目のtempの値(書き変わらない)、b[]は新しい数値、temp[]を再利用。tempを引数に渡しながらtemp[]に代入していく。こんなことができるのかがわからないです。
episteme

2020/09/20 09:38 編集

void fill_0(double a[]) { a[0] = 0.0; } // a[0] を 0 にする これ↑が理解できないって言うてます?
txty

2020/09/20 10:36 編集

void fill_0(double*a ,double*temp){temp[0]=a;//temp[0]=0;でもいいです。}、aに&temp[0]をあてがったときですが、知識りないので書き直しました。が理解できません。
episteme

2020/09/20 09:56

理解できないかもしれんけど、できます。ポインタを介することで書き換えることができます。 納得してください。
txty

2020/09/20 10:22 編集

>ポインタを介することで書き換えることができるという意図がわからないので説明してほしいんですが、そろそろ終わりにしたいですよね multiplies(&Keka[0],&Bip01_R_UpperArm_FrameTransformMatrix[0],&Keka[0]);では電卓とずれるのに、double f[16]; multiplies(&Keka[0],&Bip01_R_UpperArm_FrameTransformMatrix[0],&f[0]);ではいいの もちょっと分からないんですけど、自分は今度から &Keka[0]のかわりに &f[0]とか違う変数を結果に、わかるときまで、挟むことにしました。
episteme

2020/09/20 16:32 編集

> ポインタを介することで書き換えることができるという意図がわからない void multiplies(int c, int a, int b) { c = a * b; } // a*bをcに求める これじゃダメ(ポインタを介さないとダメ)なことがわからないなら、教本を読んでください。 > そろそろ終わりにしたいですよね 同意します。
txty

2020/09/20 23:26 編集

void multiplies(int c, int a, int b){c= a*b;}それは引数が書き変わらないことはわかるけど、multiplies(&Keka[0],&Bip01_R_UpperArm_FrameTransformMatrix[0],&Keka[0]);も最後の&keka[0]以外さわってないので、書き変わるのはそこだけじゃないのでしょうか。はじめの&keka[0]と&Bip01_R_UpperArm_FrameTransformMatrix[0]は使用しているが触っていない。c++でいうmultiplies(int a,int b, int c)const メンバーがa, bで引数じゃない気がするが。みたいなものかと(int cはいじっていますが)。最後の&Keka[0]だけ変わることを期待します。 じゃあそろそろ終わりということで。
txty

2020/09/27 14:37 編集

結果は新しい配列を挟まなきゃいけないかもだけど、epistemeさんのコード使ったら,速くて驚いた。
guest

0

[別解] 関数 multiplies に仕立ててみた

C

1#include <stdio.h> 2 3#define at(t,y,x) t[y*4+x] 4 5void multiplies(float* c, const float* a, const float* b) { 6 int row, col; 7 for ( row = 0; row < 4; ++row ) { 8 for ( col =0; col < 4; ++col ) { 9 float sum = 0.0f; 10 int t; 11 for ( t = 0; t <4; ++t ) { 12 sum += at(a,row,t) * at(b,t,col); 13 } 14 at(c,row,col) = sum; 15 } 16 } 17} 18 19int main() { 20 float a[16] = { 21 1.000000,0.000000,0.000000,0.000000, 22 0.000000,1.000000,0.000000,0.000000, 23 0.000000,0.000000,1.000000,0.000000, 24 0.000000,0.000000,0.000000,1.000000 }; 25 26 float b[16] = { 27 1.000000,0.000000,0.000000,0.000000, 28 0.000000,1.000000,0.000000,0.000000, 29 0.000000,0.000000,1.000000,0.000000, 30 0.000000,0.000000,0.000000,1.000000 }; 31 32 float c[16]; 33 34 int row, col; 35 36 multiplies(c, a, b); 37 38 // できたかな? 39 for ( row = 0; row < 4; ++row) { 40 for ( col = 0; col < 4; ++col) { 41 printf("%f ", at(c,row,col)); 42 } 43 puts(""); 44 } 45 return 0; 46}

投稿2020/07/04 07:49

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2020/07/04 09:51 編集

---------------------------------------------- 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 ---------------------------------------------- ぱっとみてわかるのはマクロで、2重ループで桁があがって16個なんかして、なんで sum += at(a,row,t) * at(b,t,col); } at(c,row,col) = sum; この辺は何かの法則な気がするけど、なにかわからないな。まったく解釈が違うかもしれないし。 で、何でこれが、元の行列に影響しないことになるんですか。いま、まだコンディションに余力がある状態だけど、昔マクロとポインタを一つにした何かはみたことあるけど、それは必須スキルなわけですか?
episteme

2020/07/04 10:10

え? ちょっと待って行列の積を求めたいんじゃないの? > 何でこれが、元の行列に影響しないことになるんですか。 aとbの値はなんも変化してないけど、それじゃアカンの?
txty

2020/07/04 10:29 編集

1.サンプルが読めるレベルじゃない2.サンプルが読めないから、元の行列に影響があるか影響がないのために作成してくれたのか推し量れない3.元のプログラムにconst float*型で誤解が生じるのを防ぐために投稿した。誤解で苦しむのが嫌い。4.余力は、どうやったら頂点に影響を与えるのかを知りたい5.自分の態度が悪いのは自覚しているが厚本はもっとひどい。ってところです。はい。あとはテンションがhighだった。
episteme

2020/07/04 11:28

> 何でこれが、元の行列に影響しないことになるんですか。 1. 関数 multipliesでは元の行列a,bを書き換えていない(書き換えたらエラーとなるんだから) 2. 関数 multiplies以外の部分でa,bを書き換えている個所が存在しない。
txty

2020/07/04 14:45

ちょっと理解が進まないので、既読したということだけ書いときます。
guest

0

いたらなかったため削除します

投稿2020/07/04 05:11

編集2021/03/09 12:14
txty

総合スコア298

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/07/04 05:14

> あと関数を何回も計算するのに、引数にconst を使うのは再利用の関点から、有り得ないことに気がつきました。 関数の引数にconstつけた場合、その関数の「中では」変更できないを意味する。 引数に渡してしまったが最後二度と変更できなくなりはしない。
txty

2020/07/04 05:25

そうなんですか。そうなるとどうなるんでしょう。。 (配列にもconst float* って書いてしまいました。。)どういうことかテキストかソースコードで見せてもらえないでしょうか。
episteme

2020/07/04 07:51

> そうなるとどうなるんでしょう。。 ごめん、意味わからんです。 # [別解] を提示しておいた。これのどこかに疑問ある?
kokorohamoe

2020/08/04 22:16

?そもそも論としてconst_castなりなんなりすれば、const外せますが・・・constというのは、変更しないでほしいというAPI作者などからの意志伝達であり命令とは言い切れないのですが・・・
kokorohamoe

2020/08/04 22:21

すみません。回答の前提についてです。4x4行列ということで1次元の4要素を持つベクター同士の乗算と受け取られる人がいるかも知れませんが、2次元の4要素の16の要素からなる行列同士の演算で数学でいう高校から大学で習う乗算演算を基本として回答しています。現在C++11がC++2Aになっているという時代背景を受けて、パラレル演算STLを背景に、GPGPUなどを平行に考えた場合、、前から掛けるか、後ろから掛けるか、つまり掛ける数かかけられる数かというところが焦点になると考えますが、それをもっとも端的なC++で表現せよといわれると、前const後ろconstと似たように 書き方によって意味が違うというネタ回答を含めつつ、真面目回答でも同じに近くなるように配慮して書いたつもりですが、未熟ですみません
txty

2020/08/05 00:57

const_castをつかわないほうがいい。しないほうがいいんでしょ。という話だったようですが、mulの命令だけを説明するなりなんなりして、書き込まなきゃ別にそれでもいいけど、もうスレをあげないでほしいぐらいに感じています。以上です。
guest

0

const char * char * const char * const

投稿2020/07/04 01:24

kokorohamoe

総合スコア190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/07/04 01:44

低評価。回答の体をなしていない。
kokorohamoe

2020/07/28 00:56

Thank you. gracias
kokorohamoe

2020/07/28 01:02

編集すると 改ざんといわれるのでこちらへ https://paiza.io/projects/cMCWeOMOiMCV3StsgdEtKg SIMD演算のうち 128Bitレジスターを使ったもの AVXによる 16行列①演算はまだ、十分なプロセッサがサポートしていないので SIMDのほうが良い 4=4までサポートしているので16=16演算AVXでなくても 君なら生けるだろう
kokorohamoe

2020/07/28 01:03

AVX-512をつかえば、4x4行列を1命令でかけられるがC言語で言えという説明で かつ無料となると まずはこのぐらい どうしてもわからなければ いまCUDAでいそがしいが、AVX2のサンプルぐらいは初回特典がわりにサービスしてもいいが きみなら なくても 大丈夫だろう
txty

2020/07/28 03:39

残念ですが誘導にはのらない主義だけど、誰ですか。アセンブラはとっくにわすれたけどやらねーよ。あと、初回特典なんかいらないよ。なんの勧誘ですか。
kokorohamoe

2020/07/28 04:51

諸事情でちょっといまやってる。たてこんでる。覚えてはおくがもどってこなかったら、ごめんな。C++2Aがでたので4スレッド 4コア 同時使用で4x4行列演算 SIMD128x4並列4コア はわかるんだが、スレッドプールの実装が1回キャンセルになったのもあるしいまどたばたしていてわからん
kokorohamoe

2020/07/28 04:52

おっしゃるとおり 12個のコアがあると①クロックで12SIMD同時演算
m.ts10806

2020/08/02 22:22

>編集すると 改ざんといわれるのでこちらへ 正しく対応されるなら改竄ではなく改良です。それに編集履歴から確認できるのでいわゆる改竄にはなりません。単に編集です。
txty

2020/08/02 22:51 編集

m.ts10806さん> 正しく対応できてないので改竄でいいと思う。見てないけど。 あと、4*4の行列書いていってください。
Zuishin

2020/08/02 22:52

改竄は「かいざん」と読み、文書を不正に変更することを指します。回答を編集するのは不正な行為ではなく、簡単に編集履歴を見ることができます。
Zuishin

2020/08/02 22:53

> あと、4*4の行列書いていってください。 解決しているのになぜ?
txty

2020/08/02 23:09 編集

Zuishinさん>何の理由で誘導してるかわからないし、誘導が成功したなら、目的を変えるやつもいるから駄目だ。書いてる人は、リスク背負って書いてるわけで評論にさらされるのは絶対的におかしい。さらにみていくと、書いた立場からいうと-評価つくような場所についていないし、つかない場所につくので、こいつ軽い気持ちでかいているんだなとか思う。
Zuishin

2020/08/02 23:05

評論にさらされるリスクを背負って書いているのに評論にさらされるのがおかしいというのがおかしいです。
Zuishin

2020/08/02 23:12 編集

https://teratail.com/help > 回答の評価について知りたい > > 高評価(+)がつく回答 > 正しい回答 > わかりやすい回答 > ためになる回答 > > 低評価(-)がつく回答 > 間違っている回答 > 質問の回答になっていない投稿 > スパムや攻撃的な表現など不快な投稿 この回答は質問の回答になっていない投稿なので低評価がついています。 衆目にさらされて評価を受けることが、その回答の正当性の目安となります。 評価するのは「回答した人」ではなく、「その回答を見た人」です。回答した人しか評価できないのであれば、回答への評価はごく少数からなされたものでしかなくなり、信頼性を大幅に損なうでしょう。
txty

2020/08/02 23:13

スルーすればいいと思う。こちらはもっと正しい解が存在したら、回答変えるだけなので。
Zuishin

2020/08/02 23:13

いいと思うのはあなたの勝手ですが、それはこのサイトのシステムとは違います。それを押し付ける権利はあなたにはありません。
txty

2020/08/02 23:17

いや3時間で書いたコードだったので5分程度で評価されるならその権利は存在するね。
Zuishin

2020/08/02 23:18

質問者が選ぶベストアンサーと、ユーザーによる回答への評価は独立して行われます。質問者の選ぶベストアンサーが必ずしも正しいとは限らず、後から見る人の役に立たないどころか嘘を広める一因となる可能性があるためです。 ベストアンサーに低評価がつき、他の回答に多くの高評価が寄せられることも多々あります。後から見る人にとっては、ベストアンサーよりも高評価が多い回答の方が参考になる可能性が高いです。 teratail での質問と回答は、質問者のためだけにあるのではありません。問題を共有して同じ問題に困っている人が参考にするための資料となります。そのためには知識が少ないかもしれない質問者一人だけではなく、それなりの知識と経験をもった多くのユーザーによる評価が必要です。
Zuishin

2020/08/02 23:20 編集

それでもどうしても「俺様の考えた権利」を主張したいなら、運営に入って自分でどうにかしたらどうでしょうか。現状、あなたの意見は数千人のユーザーの中の一意見でしかなく、あなたの意見を絶対的なものと考えるのはあなただけです。
txty

2020/08/02 23:28

運営は首をふるだろうが、ここでは、ルールにしたがってもらう。ベストアンサーをつける質問者はいいといても、横やりのひやかしには我慢できないね。ルールに従ってもらうのは、answerが間違えてたら嫌だからフィードバック集めのためにここではルールをつける。
Zuishin

2020/08/02 23:41

あなたにはそのルールを押し付ける権利はありません。
dodox86

2020/08/02 23:51

>@txtyさん 一度はBAがつき、解決した質問回答でしょう。一体、何をお求めなのでしょうか。 txtyさんの[2020/08/03 08:13]のコメントより > こちらはもっと正しい解が存在したら、回答変えるだけなので。 このような問題では、正しい答はひとつのはずです。それに至る解、解法は複数あるかもしれず、もっと正しい(<と質問者が信じる)解法があれば、回答を求め続けるおつもりでしょうか。 txtyさんの[2020/08/03 08:28]のコメントより > answerが間違えてたら嫌だからフィードバック集めのためにここではルールをつける。 そのようにご自分で勝手につけたルールに回答を検証できるまともな方が応じるとは思えず、それこそ冷やかしのフィードバックしか得られなくなりますよ。
txty

2020/08/02 23:51

それでも書いてってもらう。間違えてるなら、間違えてるといってくれればいいんだが。ー評価だけだと困るんだよな。目的「直すこと」が、目的「困らす」ことになる。
Zuishin

2020/08/02 23:58

> いや3時間で書いたコードだったので5分程度で評価されるならその権利は存在するね。 ところで、三時間かかったコードはどこですか? とても次のコードに三時間かかるとは思えませんが。 > const char * char * const char * const これのことですか? > https://paiza.io/projects/cMCWeOMOiMCV3StsgdEtKg
txty

2020/08/03 00:01

いや、内積の計算部分だけど、やったことがあり理解できる操作なら、時間はかからないが、組み立てるのに時間がかかった。
Zuishin

2020/08/03 00:06

https://teratail.com/questions/274888#reply-392013 これのことなら、 1. 回答ではなく質問である 2. ロジックが合っているかどうか確かめていない 3. 元の値が変わってしまうなどの問題を抱えている と、いくつもの問題があり、低評価で当然です。むしろなぜこれが低評価にならないか尋ねるのがわからないほどひどい回答です。作るのに何時間かかったかなど関係ありません。
txty

2020/08/03 00:07

このような問題では、正しい答はひとつのはずです。それに至る解、解法は複数あるかもしれず、もっと正しい(<と質問者が信じる)解法があれば、回答を求め続けるおつもりでしょうか。 そういう姿勢でやってきたが、もっと効率がいい方法があったら、やり方をかえるけど
episteme

2020/08/03 00:09

さっき別解を呈示したけど、これでいい?
txty

2020/08/03 01:27 編集

...ここみすった。
txty

2020/08/03 00:14

いいですよ
Zuishin

2020/08/03 00:16

あなたが問題にならないと考えているだけですね。ひどい回答なので、問題と思う人は大勢いると思います。それが評価に表れています。
episteme

2020/08/03 00:18

では、この問題は解決しましたか? 解決していないなら、何が残ってますか?
txty

2020/08/03 00:26

回答はあればあるだけいいんだが、めんどくさくなってきたので、終わりにする。
episteme

2020/08/03 00:31

ひと月前に解決したやつを蒸し返す方がよっぽどめんどくさいんだがwww
kokorohamoe

2020/08/03 00:33

おつかれさま。この問題4x4行列というのはAVX512でFloatの一括演算が実装され始め、いままさに暑い話題だと思います。そういう意味ではとてもよい質問でした。ありがとうございます。わたしはm128が好きなのですが、どちらが良いか?というのはプログラマーというよりマーケティングの問題なので難しいですね。また、楽しい質問や、おもしろ回答期待しています。ありがとうございました。なるべくおもしろ回答を作れるようがんばります。
txty

2020/08/03 00:38

終わりにしていいんですよね。もう返信しませんが。
m.ts10806

2020/08/03 01:59

>間違えてるなら、間違えてるといってくれればいいんだが ルールを自分で作るやり方間違ってるので改めてください。 teratailのルールはteratail運営が作ったものが唯一です。
kokorohamoe

2020/08/03 02:08

よくわかりません。ごめんなさい。 4x4の演算は産業界でも非常によく使われるために、AVX2による行列演算のCPUによる実装などがあり場合によっては組み込み命令でA*Bで解決できる場合もあり今答えがありません。 そのためよくわかりません。さすがにTeratailさんといえどもコンパイラの標準がC++11やC++2Aの変更で変更になった場合など、変更になる可能性が0と宣言してしまうことは難しいですしC++11.2Aのように規格にまで言及する問題は1ヶ月2ヶ月では回答が難しくC++11という言葉からわかるように議論が10年20年におよぶことはよくあると個人的に思っており、ここはコメント欄であり解答欄ではないと考えましたが、運営方針と違うというのは私も感じており、あまり手を広げないように自粛はしていますが、すみませんでした。より気をつけます。
Zuishin

2020/08/03 02:21

話が支離滅裂で知ってる単語を並べただけにしか見えません。
kokorohamoe

2020/08/03 20:53

ではあなたにとっては、そうなのだろう。としかいえない。大学でプログラムを習う 400万から600万そのお金を払っていてわからないというとそれは大学で先生に聞いたほうがいいと思う。無料の僕らではなく有料でわからなかったら教えるという契約をしたほうを優先したほうが良い。 ただconstについてC++のかなり有名な議論を前提にした冗談なので 真ん中のconstはブラフだけど 支離滅裂ではない
kokorohamoe

2020/08/03 20:59

ソートをみてもヒープソートマージソート さまざまなやりかたがあって、人それぞれちがうから そのひとのやりかた わからないこともあるから 私は是非を言っているわけではないことだけ ご理解いただきたい あなたのやりかた そして推理小説の犯人を 聞かれても鋳ないのに ネタバレしたくないから うかつなことが言えない そのなかでは こういうスタイルをとってる
Zuishin

2020/08/03 21:37

> AVX-512をつかえば、4x4行列を1命令でかけられるが そのニモニックを書いてみてください。
kokorohamoe

2020/08/04 04:33

さすがに本業がプログラマであり、有償でコードを販売いしている以上今売れ筋のコードを無償で書くのは信義則上厳しいのでご容赦ください https://paiza.io/projects/cMCWeOMOiMCV3StsgdEtKg サンプルとして私が権利を有するコードを公開しているもの(SSE)があるのでloadのところをmul なり add なりに変えて AVX512の関数に買えた上でAVX512をサポートしているかmm128までかを判定するコードを追加してください 基本的にはプロの間でコードを要求して仕様を伝えると金銭の話になりがちなので、質問サイトといういみでは内容が伝わる範囲で誤解を抑え相手が自発的な努力で達成可能な範囲のアドバイスが限界かと思います どうしてもあなたが独力ではできないということであれば、AVX512のコードを書かなくはないですがSIMD派なので少し時間がかかります
Zuishin

2020/08/04 04:54

「一命令」が何なのかも知らないし「ニモニック」が何なのかも知らないということがここからわかりますよね? だから支離滅裂と言っているんですよ。
episteme

2020/08/04 05:12

AVX512だと 8個の double値を対象をするベクトル演算を 1命令でやってくれるのでしょう。 4x4行列の積となると 4個のdouble値どうしの積とその総和 を 4x4=16組求めんならん。 1命令でできるとは考えられませんねぇ。 # 4x4行列の和でも最小2命令
kokorohamoe

2020/08/04 06:26

大変申し訳ございません。4x4=16という段階で暗黙的に512÷16=32で単精度というのは自明の理でわからない人が別の質問で個別に聞くことであり、質問の本来の趣旨からは離れるかと思います。doubleがあるsingleがあるということをお前はわからないだろうというふうには失礼なので私には申し上げることができないことをご了承ください
episteme

2020/08/04 06:31

float 16個だとしても 4x4行列の積は無理よね。要素毎の積ならともかく、ここではドット積の話してるし。
kokorohamoe

2020/08/04 06:35

いちおうSSE m128を4x4行列に使う=32単精度x4を4回行えばいいということは16回の掛け算を1回に4回同時に行えるとすると何回やればいいですか4回 というのを4x4行列を扱うつまり 高校生に 16÷4=4ってわかる?というふうに聞く気に離れないので数学を選択していない方には難しいのかもしれませんが、大変申し訳ございませんが高校数学の話なので高校程度の話は別途質問いただかない限り自明の理としています
Zuishin

2020/08/04 06:37 編集

> AVX-512をつかえば、4x4行列を1命令でかけられるが 「かけられる」と書いてますね。大変申し訳ございませんが、「たす」「ひく」「かける」「わる」という専門用語は小学校算数の話なので、そこからやり直してください。
kokorohamoe

2020/08/04 06:38

大変申し訳ございません。回答者である私は大本の質問に対して内積などの行列演算でもすこし趣を異なるものについては想定していません。やればSSE数回に減らすことはできるとしても。内積などを高速に取得することは私の範疇ではなくフィンガープリントが必要な場合ですのね、別な議論と私の場合は考えますのでそちらのかたとお話されると良いかと思います。コメントありがとうございました。
episteme

2020/08/04 06:40

ごめんわかんない。NxN行列の積を求めるにはスカラ積をN^3回(32単精度x4を16回)やることになるはずなので。
Zuishin

2020/08/04 06:40

あのね、カタカナ並べて素人をけむに巻くような方法がなぜここで通じると思ったの?
kokorohamoe

2020/08/04 06:41

※私の行列の使い方だと、内積など通常の積や加算以外の使い方はフィンガープリントなど特殊な場合が多く、高速化の必要性が高くなく可読性のほうが重要視される場合が多いため私にとってはこのように記述しますが、大本の回答からは趣旨が離れすぎるためこのように考えています
kokorohamoe

2020/08/04 06:42

通じない場合はそのまま無視してください
kokorohamoe

2020/08/04 06:43

※たくさんの回答者の中から自分のやり方に近い回答を得るためには、複数の人が複数のやり方を提示し自分がこのやり方について知りたいと思ったものにコメントをするのが適切な方法かと個人的に考えます
Zuishin

2020/08/04 06:44

私のさいきょうの行列の使い方は知らないけど、行列の掛け算が一命令でできると言ったのはあなたでしょ? 通じない場合はそのまま無視? バカ言うな。 見栄を張って嘘をつくようなやつの言葉は、「これは嘘だ」ってちゃんと印付けとかないと初心者が混乱するでしょう。 だからあなたの回答にはみんな苦笑しながら低評価してるんですよ。
Zuishin

2020/08/04 06:47

スコア -64 はあなたの今まで張ってきた見栄が全部バレてる証拠の烙印です。少しでも恥ずかしいと思うならそれ以上イタいことを言うのはやめてもう一つのアカウントに集中しなさい。
kokorohamoe

2020/08/04 09:29

回答行列をAn もとの行列をH かける行列をVとしたばあいに An=HV なる演算をするばあい私は個人的に 一般的にはダブルループを使うとしても SSE(m128)を選ぶのがメインなのでなんともいえません。AVX512により 32x16レジスタですので回答しています。ひとによりシャッフルという人もいるでしょうが、私の場合はおっしゃっているように私の使い方ですので、シャッフル命令がふようなため、ロード命令は必要ですが割愛しMUL命令で回答しています。レジスタに値が用意されている場合MUL命令1つという意味で回答しています。なおAn のnはn回目のストリーム上の連続する演算と読み替えていただいても結構です 私の言葉が足りず不快な思いをさせてしまった場合、この場を借りて、そのことについては謝罪申し上げます とくにご質問でない場合は、私の発言が謝っているだろうとのご主張ですので意識違いを訂正させていただきました ことばは尽くしているつもりです
kokorohamoe

2020/08/04 09:31

あと基本的にアカウント名でログインしていますので、ことなるアカウント名の場合異なる人物だと思いますので誤解、見間違いがありますのでアカウント名をご確認ください。
kokorohamoe

2020/08/04 09:37

コンパイラで1度確認がいりますが マエconst 後constなど前からconstをかけるのか、うしろかかかけるのかで意味が違うというテーマから派生し 日本語で説明するよりもオリジナルが英語なら英語で回答したほうがプログラムならプログラム言語で回答したほうが早いということから、表題のタイトルで回答しています。
Zuishin

2020/08/04 09:48 編集

MUL 一つで行列の乗算ができると言っているわけですか?
kokorohamoe

2020/08/05 20:32

こういうふうに間違える人もいますとおわらいいただければよいのでしょう お時間をちょうだいすることになり もうしわけない というのとは違いますが謝罪を   誠に申し訳ございませんでした。楽しいひと時をありがとうございました。 不愉快な思いをさせる意図はございませんでした。 お詫び申し上げます
guest

0

いたらなかったため削除します。

投稿2020/07/03 16:53

編集2021/03/09 12:11
txty

総合スコア298

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2020/07/04 05:15

理由が知りたい。なぜ低評価がついたのだろう。。
退会済みユーザー

退会済みユーザー

2020/07/04 17:26

C系は得意じゃないので文法的なところはよくわかりませんが、回答をする場所で質問してるからだと思います。 この質問に追記するか新しく別の質問を立てた方がよいかと。 また、terateilの使い方がよく分かってなさそうなので以下のヘルプに目を通しておくといいでしょう。 質問するときのヒント: https://teratail.com/help/question-tips 回答の評価について知りたい: https://teratail.com/help#aboutReplyVote
txty

2020/07/04 17:29

ありがとうございます。目を通して参考にします。
退会済みユーザー

退会済みユーザー

2020/07/04 17:41

あとコードはmarkdown記法を使って記述しましょう。 markdown記法については以下を参照。 https://www.markdown.jp/what-is-markdown/ ```C float Frame_Scene_Root[16]={ ~~省略~~ } Ranks(&temp[0],&Frame_Scene_Root[0],&Frame_body[0]); ``` というように```でコードを挟むことでコードを見やすく表示することができます。 (epistemeさんの回答みたいな感じ) 試しにこの回答をmarkdown記法を使って修正してみてください。 上手くできたら他の回答と質問の方も。
txty

2020/07/04 18:12

やってみたんですけど、目がちかちかしました。失敗のようです。あと、ロムるからいいです。 本当にありがとうございました。
退会済みユーザー

退会済みユーザー

2020/11/26 13:47 編集

間違ったことを書いていたので削除
txty

2020/07/30 03:06

いや、退会はしないけどね。
kokorohamoe

2020/08/03 00:59

端的にはグローバル変数の初期化と、関数のローカル変数の初期化は違う。あなたがやっているのはグローバル変数の初期化を使っているから、プログラムの実行時に1度初期化されているしかし、実際は関数の呼び出し時に毎回初期化する必要があるので、明示的にForをつかって初期化するほうが良い。これはC++の知識だけでも溶けるが、OSやハードの知識もあったほうが問題をときやすい。constはconst記号を付ける位置を変えるとポインタをconstなのか、ポインタの値をconstなのかがかわるいように、初期化も初期化の対象が代わるという比喩。知識は有料であるから、無料で回答といわれると、たしょうは無料感がいるから、すこしぼかしている。本来はconstではなく初期化子のいちがおかしいというほうがよりわかりやすい回答ではあるが、そうすると有料の回答に近づいてしまう。まぁ、こんなもん
Zuishin

2020/08/03 01:12

初期化は本題ではないのでどうでもいいです。ファイルやデータベースから読み込むのが最もポピュラーだと思いますが、それを書いてもノイズにしかなりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問