20/07/11 05:56:37.58 ckcY8r2v.net
やっぱ>>934とか簡潔に要点が押さえてあるとオモタ、
GetHoge()が呼ぶたびに毎度新しく作ったvectorを返すのならディープコピーを返したらええ
ディープコピーは生成元と所有権で揉めることがありえないからふつくしい
最適化によって実際にはreturn時にvectorの要素がコピーのかわりにmoveされるかもわからんがふつくしさは損なわれない
(さらにいうと、GetHoge()がインライン関数なら最適化でそもそもvector自体のコピーも移動も起きない公算がおおきい
>>919-920な疑問に関しては、
std::vector<T> v1 = GetHoge(); // std::vector<T>のディープコピーを返すバージョンのGetHoge()
std::shared_ptr<std::vector<T> > ptr(new std::vector<T>(v1)); // (*1)
で良いジャマイカ、
非バカが見れば(最適化有効化時は)実際には*1において、v1の要素が*(ptr.get())にコピーではなくmoveされる公算が大きいということがワカル
しかしバカが見ても動作は明確でなんの危険も無い
ptrが一時オブジェクトであっても問題が無い
それでいいジャマイカ、にんげんだもの
996:デフォルトの名無しさん
20/07/11 12:27:05 wTK7zrpK.net
なんだかものすごく懐しさを思わせる文体だな
20年ぐらい前のニチャンネラーの書き方だな
997:デフォルトの名無しさん
20/07/12 06:25:16.82 tiZP2jTh.net
ある整数nが他の整数の4乗であることを調べたい。
(int)pow(pow(n, (double)1/4), 4) が n であるかどうか調べりゃ良いよな?
キャストはどっちかのpowにつければ十分だよね?
998:蟻人間
20/07/12 06:31:57.79 bazuV89L.net
>>986
素直に(n*n)*(n*n)でいいだろう。
999:デフォルトの名無しさん
20/07/12 06:48:24.60 D8OEpmlP.net
なにそのカッコ
1000:デフォルトの名無しさん
20/07/12 06:52:03.42 D8OEpmlP.net
powよりsqrt 2回の方が良い
浮動小数点演算が非常に遅い環境なら
整数の2分検索という手も
1001:デフォルトの名無しさん
20/07/12 07:00:58 D8OEpmlP.net
int m = (int)sqrt(sqrt((double)n);
if (n == m*m*m*m) ...
普通はこれで良い
1002:蟻人間 ◆T6xkBnTXz7B0
20/07/12 07:01:32 bazuV89L.net
>>988
n*nを掛け合わせる方が早いからさ。
1003:デフォルトの名無しさん
20/07/12 07:03:01 D8OEpmlP.net
>>986だと内側のpowの結果を整数に丸めないと
1004:デフォルトの名無しさん
20/07/12 07:05:50 D8OEpmlP.net
>>991
2個のn*nを1回にするかどうかはコンパイラ次第
コンパイラに頼るならカッコつけずにn*n*n*nで良いし
頼らないならn*nを一時変数に一旦入れないと
そもそもnを4乗しても意味ないけど
1005:デフォルトの名無しさん
20/07/12 07:06:15 m1mq7f3n.net
外でキャストしても無意味だろ、内をキャストしなきゃ
intにキャストだと誤差で1減る可能性があるから四捨五入しなきゃダメ
でだ、4乗するのにpow()はありえないし
4乗根もpow()よりsqrt(sqrt())の方がマシじゃないかな
でだ、元々整数だけの問題なのにsqrt()使うのが嫌
二分探索で(x * x * x * x) == nになるxを探す方がいいんじゃ?
1006:デフォルトの名無しさん
20/07/12 07:12:28.75 D8OEpmlP.net
nが平方数なら
普通はsqrt(n)の結果に誤差は無い
nもdoubleも32bitの環境でdoubleキャ�
1007:Xトによって誤差が出る場合や sqrtの計算方法が普通ではない場合には 丸め方法も考えないと
1008:デフォルトの名無しさん
20/07/12 07:15:24.87 tiZP2jTh.net
二分探索ってO(log n)でしょ?
sqrtとかpowより速いの?
これも「実装依存」なの?
1009:デフォルトの名無しさん
20/07/12 07:16:36.03 tiZP2jTh.net
まあ速さよりは間違えそうじゃなさと文法的な分かりやすさ、短さの方が今求めてるものですけど
言ってなくてすみません
1010:デフォルトの名無しさん
20/07/12 07:18:45.88 D8OEpmlP.net
doubleが非常に遅い環境や
浮動小数点演算のライブラリを積みたくない場合
などで2分検索を使う場合もある
という程度
1011:デフォルトの名無しさん
20/07/12 08:11:47.62 oJ0fA8EI.net
「平方数か」を高速に判定する方法があれば、
平方数なら → 平方根を計算 → 平方根が平方数か
…という2段階の判定もありそうな感じ。
1012:デフォルトの名無しさん
20/07/12 08:31:16.95 m1mq7f3n.net
>>995
そうなんだ、なんでだろ?
80bitで計算して丸めてるから?
1013:デフォルトの名無しさん
20/07/12 09:41:30 uBv3fNFk.net
整数Cを素因数の4乗で割っていき、
1になるまで余りが出なければ、
全体は整数の4乗である
1014:1001
Over 1000 Thread .net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 58日 21時間 48分 5秒
1015:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています