次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part139
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワッチョイ f65b-zn+7)
2018/10/06(土) 00:59:48.54ID:CdYUXXMG0837デフォルトの名無しさん (ワッチョイ 5ad2-4fyn)
2018/12/28(金) 20:14:43.49ID:NSIH2Vow0 >>836
newすれば実体確保できるとの認識でしたが、やはり別に実体を用意しないといけないのでしょうか
https://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/newdelete.html
newすれば実体確保できるとの認識でしたが、やはり別に実体を用意しないといけないのでしょうか
https://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/newdelete.html
838デフォルトの名無しさん (ワッチョイ aa7e-SF4R)
2018/12/28(金) 20:30:07.39ID:t3Tixi/x0 ポインタの配列が無いって話だろ
839デフォルトの名無しさん (ワッチョイ 71e3-5EXd)
2018/12/28(金) 21:37:00.90ID:IR9VtjpT0 _timerParameter[_timerSize]の型はTimerParameter
new TimerParameter(...)の型はTimerParameter *
あと、
Type * ptr;
ptr[2] = createType();
なんてやっちゃダメなのわかってる?
Type * ptr;
ptr = new Type[10];
ptr[2] = createType();
ならいいんだけど
あと、"_"で始まる名前は処理系予約だし
timeはcの標準関数にtime_t time(time_t *t);があるんでやめれ
new TimerParameter(...)の型はTimerParameter *
あと、
Type * ptr;
ptr[2] = createType();
なんてやっちゃダメなのわかってる?
Type * ptr;
ptr = new Type[10];
ptr[2] = createType();
ならいいんだけど
あと、"_"で始まる名前は処理系予約だし
timeはcの標準関数にtime_t time(time_t *t);があるんでやめれ
840デフォルトの名無しさん (ワッチョイ 5523-sckh)
2018/12/28(金) 23:30:44.23ID:2sBVkvJt0 アンダーバー2つかアンダーバー+大文字で始まるものが予約されてるだけでアンダーバー+小文字で始まるのは大丈夫
841デフォルトの名無しさん (オイコラミネオ MMad-vEXr)
2018/12/28(金) 23:49:39.38ID:foyNhCLxM vector<vector<float>> = {
{1.33333334, 3.99918277},
{2.56883338, 1.29994666}
}
このようにvector<vector<float>>をdouble型の要素で初期化しようとすると縮小変換が必要とのエラーが出ます
どうしたら縮小変換しつつ初期化出来るんですかね?
{1.33333334, 3.99918277},
{2.56883338, 1.29994666}
}
このようにvector<vector<float>>をdouble型の要素で初期化しようとすると縮小変換が必要とのエラーが出ます
どうしたら縮小変換しつつ初期化出来るんですかね?
842デフォルトの名無しさん (ワッチョイ 7a74-EZHq)
2018/12/29(土) 00:24:51.94ID:igG8GHWt0 floatのリテラルを使わない理由が分からない
843デフォルトの名無しさん (ワッチョイ 6905-1n9i)
2018/12/29(土) 02:57:26.73ID:9LI18QIG0844デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/29(土) 06:39:32.70ID:2E+KpNh/a >>841 数字の末尾にf
845デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/29(土) 06:40:13.70ID:2E+KpNh/a もしくはstatic_cast<float>
846デフォルトの名無しさん (ラクッペ MMa5-O+vW)
2018/12/29(土) 17:02:40.74ID:UQDnLnHIM BoostやSTLのDeveloperになりたいんですけど、テンプレートを極めればなれますか?
847デフォルトの名無しさん (ワッチョイ 61c3-WBK1)
2018/12/29(土) 17:05:30.58ID:mHcV7M6o0 テンプレートに限らずC++を極めてるのは当然の前提として
Developerとして参加するプロジェクトをどうしたいとか、どんな価値を提供できるかとかが重要じゃないかな
Developerとして参加するプロジェクトをどうしたいとか、どんな価値を提供できるかとかが重要じゃないかな
848デフォルトの名無しさん (ワッチョイ aa7e-SF4R)
2018/12/29(土) 17:17:06.00ID:U1nQeVxJ0 BoostならBoost相当の性能のライブラリを作って水準に合うドキュメントと何故それがBoostに必要なのか説明する提案書を書いて提出すれば100回リジェクトされる頃には採用されるかも知れない
849デフォルトの名無しさん (ラクッペ MMa5-O+vW)
2018/12/29(土) 17:35:17.80ID:UQDnLnHIM850デフォルトの名無しさん (ワッチョイ 61c3-WBK1)
2018/12/29(土) 17:56:06.46ID:mHcV7M6o0 >>849
C++自体を改良したいなら標準化委員会に行くかコンパイラの開発に参加しよう
C++自体を改良したいなら標準化委員会に行くかコンパイラの開発に参加しよう
851デフォルトの名無しさん (ラクッペ MMa5-O+vW)
2018/12/29(土) 18:16:38.42ID:UQDnLnHIM >>850
どっちも検討してみます
どっちも検討してみます
852デフォルトの名無しさん (ワッチョイ 697b-4fyn)
2018/12/29(土) 18:34:59.20ID:EkrQifAZ0 すばらしい、C++標準化に参加して、文字コードの扱いの混乱した現状をなんとかしてほしいw
char型はwindowsがsjis、それ以外がutf8、
wchar型は64bit linuxが32bitで、それ以外は16bit、
どのプラットフォームでも同じようにつかえるchar16_t/char32_tはAPIやライブラリが未整備な上、エンディアンの問題がつきまとう、
と、マルチプラットフォームで各種文字コードの透過的な相互運用は事実上不可能な状態だからな……
char型はwindowsがsjis、それ以外がutf8、
wchar型は64bit linuxが32bitで、それ以外は16bit、
どのプラットフォームでも同じようにつかえるchar16_t/char32_tはAPIやライブラリが未整備な上、エンディアンの問題がつきまとう、
と、マルチプラットフォームで各種文字コードの透過的な相互運用は事実上不可能な状態だからな……
853デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/29(土) 18:45:45.22ID:fhXB+EYEa bomの有無とか?
854デフォルトの名無しさん (ワッチョイ 697b-4fyn)
2018/12/29(土) 19:04:16.27ID:EkrQifAZ0 そう、それな、ポータブルな保存形式はutf8で良いと思うんだけど、BOMの有無とか、冗長コードの問題とかで実際にやってみると意外と面倒なんだよね。
855はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-SF4R)
2018/12/30(日) 05:24:49.23ID:I1/5m0WE0 Windows では Shift_JIS (CP932) という前提もホント駄目な勘違い。
856デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/30(日) 08:17:58.30ID:vtZx8IN+a visual studioはいろんなエンコードに対応してるように見せかけてshift-jis前提で動いてる気がする。
デバッガでpngのシグニチャ確認したら臼ngとなるとか、コメントにπを書いたら赤の波線が出るとか。
デバッガでpngのシグニチャ確認したら臼ngとなるとか、コメントにπを書いたら赤の波線が出るとか。
857さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdfa-Pp1Z)
2018/12/30(日) 11:01:04.79ID:KcpheNgcd >>856
ユーザーのコードページを変える以外に方法がないらしい。
ユーザーのコードページを変える以外に方法がないらしい。
858デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/30(日) 11:15:52.66ID:vtZx8IN+a >>857
方法あったの!?
方法あったの!?
859デフォルトの名無しさん (ワッチョイ 95f2-4fyn)
2018/12/30(日) 11:36:24.11ID:JDxg8BDU0 Windowsの言語パック入れて表示言語を選択すればたぶん変わる。
860デフォルトの名無しさん (ワッチョイ aa32-SF4R)
2018/12/30(日) 11:43:21.51ID:TL6Cx54I0 windowsは英語設定安定
861デフォルトの名無しさん (ワッチョイ 694e-4fyn)
2018/12/30(日) 11:59:41.73ID:bm6ZOgnS0 まぁ、マイクロソフトも徐々にUTF8を標準サポートにする方向みたいだから、2〜3年したらVisual Studioもデフォルトがutf8になるかもね。
エンディアンの問題も、x86,ARMに続いてRISC-Vがリトルだから、流れとしてはリトルで統一ってことになるのかな。そうなったら楽でいいなw
エンディアンの問題も、x86,ARMに続いてRISC-Vがリトルだから、流れとしてはリトルで統一ってことになるのかな。そうなったら楽でいいなw
862デフォルトの名無しさん (ワッチョイ 1a01-SF4R)
2018/12/30(日) 13:40:53.27ID:Ux/rKcR40 RISC CPUが出始めたときはビッグの勢いあったけど
結局リトルに収斂したな
おれは昔からリトルが自然と感じてたのでいい流れだ
ネットとの相性が悪いのは残ってしまうが
結局リトルに収斂したな
おれは昔からリトルが自然と感じてたのでいい流れだ
ネットとの相性が悪いのは残ってしまうが
863デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2018/12/30(日) 13:46:05.24ID:31DgsdhN0 Emscripten で Cソース中に以下のようなプログラムを作ると、MyPrintf()内の
(2) で (3)の vsprintf() を呼び出そうとした瞬間に、なぜか (4) に来ずに、
(5)に戻ってきて a4 に制御が戻って来てしまうことが判明。タイマーイベント
を使ってる。誰か原因の見当が付く人いない?
EM_ASM( {
function js_OnTimer() {
console.log( 'begin of js_OnTimer()\n' ); //a1
var cl_OnTimer = Module.cwrap('OnTimer', 'number', ['number']);
console.log( 'js_OnTimer(), before calling cl_OnTimer(1)\n' ); //a2
var rc = cl_OnTimer(1); //a3
console.log( 'js_OnTimer(), after calling cl_OnTimer(1)\n' ); //a4
console.log( 'end of js_OnTimer()\n' ); //a5
}
setInterval(js_OnTimer, 1000);
});
extern "C" int OnTimer( int a ) {
OnTimerCore();
return 0;
}
void OnTimerCore() {
MyPrintf( "begin(MyPrintf) of OnTimerCore(), %d", 123 ); // (1)
printf( "begin(printf) of OnTimerCore(), %d\n", 456 ); // (5)
}
(2) で (3)の vsprintf() を呼び出そうとした瞬間に、なぜか (4) に来ずに、
(5)に戻ってきて a4 に制御が戻って来てしまうことが判明。タイマーイベント
を使ってる。誰か原因の見当が付く人いない?
EM_ASM( {
function js_OnTimer() {
console.log( 'begin of js_OnTimer()\n' ); //a1
var cl_OnTimer = Module.cwrap('OnTimer', 'number', ['number']);
console.log( 'js_OnTimer(), before calling cl_OnTimer(1)\n' ); //a2
var rc = cl_OnTimer(1); //a3
console.log( 'js_OnTimer(), after calling cl_OnTimer(1)\n' ); //a4
console.log( 'end of js_OnTimer()\n' ); //a5
}
setInterval(js_OnTimer, 1000);
});
extern "C" int OnTimer( int a ) {
OnTimerCore();
return 0;
}
void OnTimerCore() {
MyPrintf( "begin(MyPrintf) of OnTimerCore(), %d", 123 ); // (1)
printf( "begin(printf) of OnTimerCore(), %d\n", 456 ); // (5)
}
864デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2018/12/30(日) 13:46:34.18ID:31DgsdhN0 >>863
void MyPrintf( const char *pszFormat, ... ) {
char szBuf[2048];
va_list va;
va_start( va, pszFormat );
EM_ASM( { console.log( 'MyPrintf, before call vsprintf()\n' ); }); //(2)
vsprintf( szBuf, pszFormat, va ); // (3)
EM_ASM( { console.log( 'MyPrintf, after call vsprintf()\n' ); }); //(4)
va_end( va );
}
void MyPrintf( const char *pszFormat, ... ) {
char szBuf[2048];
va_list va;
va_start( va, pszFormat );
EM_ASM( { console.log( 'MyPrintf, before call vsprintf()\n' ); }); //(2)
vsprintf( szBuf, pszFormat, va ); // (3)
EM_ASM( { console.log( 'MyPrintf, after call vsprintf()\n' ); }); //(4)
va_end( va );
}
865デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2018/12/30(日) 14:57:17.90ID:31DgsdhN0 >>863
原因は、main 関数の最後に書いておいた、次のループにあった :
for ( ;; ) {
emscripten_sleep(36000000); // 何日間も待つ。
}
このループをコメント・アウトするだけで、vsprintf() が1つ前の戻り先に
戻ってしまう不具合も、sprintf() が 0 終端文字を書いてくれない不具合も
共に起きなくなった。
このループを書いていたのは、Emscripten 1.35 で、かつ、
wasm ではなく、asm.js で試していたときに、キー押下イベント
などが発生した時に
Assertion failed: the runtime was exited (use NO_EXIT_RUNTIME to keep
it alive after main() exits)
というエラーが出るためだった。つまり、main() 関数が終わると、
「ランタイム」(ランタイム・ライブラリ?) も終了してしてしまうので、
main() を終わらせられなかった。だから、main() の最後に、なんらかの
無限待機の仕組みが欲しくなって書いていたのだった。
現在は このループを除去しても警告が出なくなっているが、
Emscripten の Version を上げたせいか、asm.js ではなく、wasm の方を
使うようになったせいかは分からない。
原因は、main 関数の最後に書いておいた、次のループにあった :
for ( ;; ) {
emscripten_sleep(36000000); // 何日間も待つ。
}
このループをコメント・アウトするだけで、vsprintf() が1つ前の戻り先に
戻ってしまう不具合も、sprintf() が 0 終端文字を書いてくれない不具合も
共に起きなくなった。
このループを書いていたのは、Emscripten 1.35 で、かつ、
wasm ではなく、asm.js で試していたときに、キー押下イベント
などが発生した時に
Assertion failed: the runtime was exited (use NO_EXIT_RUNTIME to keep
it alive after main() exits)
というエラーが出るためだった。つまり、main() 関数が終わると、
「ランタイム」(ランタイム・ライブラリ?) も終了してしてしまうので、
main() を終わらせられなかった。だから、main() の最後に、なんらかの
無限待機の仕組みが欲しくなって書いていたのだった。
現在は このループを除去しても警告が出なくなっているが、
Emscripten の Version を上げたせいか、asm.js ではなく、wasm の方を
使うようになったせいかは分からない。
866デフォルトの名無しさん (ワッチョイ 557c-Oscs)
2018/12/30(日) 16:16:05.88ID:Y/PcKL5Q0 なんでリトルが自然なん?
あとから拡張しやすいって意味か?
あとから拡張しやすいって意味か?
867デフォルトの名無しさん (ワッチョイ 95f2-4fyn)
2018/12/30(日) 17:21:44.51ID:JDxg8BDU0 加算器は下の桁から処理していって桁上げする方が自然とか、複数バイト長のワードで
ビットアドレスとバイトアドレスの増加方向が同じになるとかかな。
ワードサイズが変わっても低位バイトの位置が変わらないから拡張しやすいってのも
もちろんあると思う。
ビットアドレスとバイトアドレスの増加方向が同じになるとかかな。
ワードサイズが変わっても低位バイトの位置が変わらないから拡張しやすいってのも
もちろんあると思う。
868デフォルトの名無しさん (ワッチョイ da01-ZiiZ)
2018/12/30(日) 17:42:37.29ID:8KuoxE+z0 ハード作ってる時はビッグエンディアンの方が自然な気がするがソフト作ってる時はリトルエンディアンの方が自然な気がする
まあ、FPGAと高級言語を使うようになってからは滅多に気にすることは無くなったけど
まあ、FPGAと高級言語を使うようになってからは滅多に気にすることは無くなったけど
869デフォルトの名無しさん (ワッチョイ 91e3-h5Ay)
2018/12/30(日) 17:43:15.81ID:+xBnY0nz0 >>867
cast するときにも便利。
メモリに書かれた 32BIT整数を 8BIT 整数として取得したい際など、
先頭アドレスが変わらないので、速度効率が上がりやすい。
もし、BIG ENDIAN だとそのようなときに、「3」足さないといけなく
なってしまうと思う。
cast するときにも便利。
メモリに書かれた 32BIT整数を 8BIT 整数として取得したい際など、
先頭アドレスが変わらないので、速度効率が上がりやすい。
もし、BIG ENDIAN だとそのようなときに、「3」足さないといけなく
なってしまうと思う。
870デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/30(日) 17:44:09.88ID:vtZx8IN+a fstreamでリトルとビッグの切り替えってどうするの
871デフォルトの名無しさん (ワッチョイ 95f2-4fyn)
2018/12/30(日) 17:50:27.67ID:JDxg8BDU0 逆にビッグエンディアンの方が自然に思えるのは16進ダンプ見てるときくらいしか思いつかない。
872デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2018/12/30(日) 17:52:58.01ID:31DgsdhN0 Uint32 u32;
BYTE u8;
u8 = (BYTE )u32;
とするコードがあったとする。u32 を、ポインタで置き換えたいとき、
Uint32 *pUint32;
u8 = (BYTE )*pUint32;
と書くのも正解だが、
u8 = *(BYTE *)pUint32;
と書くのも正解で、実は、後者の方が効率は良い場合があるとされる。
なぜなら、メモリから前者は4バイト読んでから上位バイトを捨てるが、
後者では最初から上位バイトを読まないから。
この場合、Little Endian だと、後者の書き方でも混乱が少ないが、Big Endian
だと何を意味しているのか分かりにくくなる。というのは、
(BYTE *)のようなポインタ型への cast は、旧来の C では、アドレス値自体は
変更せずに、型だけを変更するというのが伝統的な実装だったため
(ただし、C++ の場合、多重継承していた場合は、その原則を破ってアドレス値が
変化する事があるが。)。
BigEndian の場合、最後の書き方の実装に不安定要素が残るように思える。
BYTE u8;
u8 = (BYTE )u32;
とするコードがあったとする。u32 を、ポインタで置き換えたいとき、
Uint32 *pUint32;
u8 = (BYTE )*pUint32;
と書くのも正解だが、
u8 = *(BYTE *)pUint32;
と書くのも正解で、実は、後者の方が効率は良い場合があるとされる。
なぜなら、メモリから前者は4バイト読んでから上位バイトを捨てるが、
後者では最初から上位バイトを読まないから。
この場合、Little Endian だと、後者の書き方でも混乱が少ないが、Big Endian
だと何を意味しているのか分かりにくくなる。というのは、
(BYTE *)のようなポインタ型への cast は、旧来の C では、アドレス値自体は
変更せずに、型だけを変更するというのが伝統的な実装だったため
(ただし、C++ の場合、多重継承していた場合は、その原則を破ってアドレス値が
変化する事があるが。)。
BigEndian の場合、最後の書き方の実装に不安定要素が残るように思える。
873デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/30(日) 18:06:14.60ID:vtZx8IN+a この場合static_castは使えんの?
874>>835 (ワッチョイ 5aad-4fyn)
2018/12/30(日) 18:10:27.41ID:Q7hIiacN0875デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2018/12/30(日) 18:24:04.22ID:31DgsdhN0 >>874
>話は少し変わるんですが、>>809でクラスをnewせずに使うというのが書かれていますが、
>オブジェクトをnewせずに使うことって結構あるんでしょうか?
どちらかというと、C++では new する必要ない場合は、new しないことが
良い書き方。new は、好きなタイミングで削除したいようなオブジェクトの場合
のみ使用する。構造体やクラスのメンバの中に、別のクラスのオブジェクトが含まれている
ような場合は、new しないのが原則。
ある意味では、そのような習慣があるからこそ、C++ は効率が良いともいえる。
実は、new や malloc は、確保するサイズにかかわらず、大体 170 クロックほど
必要。delete や free と合わせると、合計 300 クロック必要となる。
一方、そのまま、new せずに「埋め込んだ」場合は、基本的に「0」クロック。
この差はとても大きなものとなることがある。
>話は少し変わるんですが、>>809でクラスをnewせずに使うというのが書かれていますが、
>オブジェクトをnewせずに使うことって結構あるんでしょうか?
どちらかというと、C++では new する必要ない場合は、new しないことが
良い書き方。new は、好きなタイミングで削除したいようなオブジェクトの場合
のみ使用する。構造体やクラスのメンバの中に、別のクラスのオブジェクトが含まれている
ような場合は、new しないのが原則。
ある意味では、そのような習慣があるからこそ、C++ は効率が良いともいえる。
実は、new や malloc は、確保するサイズにかかわらず、大体 170 クロックほど
必要。delete や free と合わせると、合計 300 クロック必要となる。
一方、そのまま、new せずに「埋め込んだ」場合は、基本的に「0」クロック。
この差はとても大きなものとなることがある。
876デフォルトの名無しさん (ワッチョイ 694e-4fyn)
2018/12/30(日) 18:27:37.01ID:bm6ZOgnS0 >>874
最初から最後まで存在し続けて、特別な終了処理が必要ないオブジェクトなら、わざわざヒープを確保して実行時に初期化する必要はないでしょ。
あと、staticなオブジェクトのコンストラクタはmain関数の前にグローバルコンストラクタから呼び出されるのだが、
これを利用して、プログラム起動時にやっておきたい初期化処理をクラス内で記述する目的に使うこともあるね。
最初から最後まで存在し続けて、特別な終了処理が必要ないオブジェクトなら、わざわざヒープを確保して実行時に初期化する必要はないでしょ。
あと、staticなオブジェクトのコンストラクタはmain関数の前にグローバルコンストラクタから呼び出されるのだが、
これを利用して、プログラム起動時にやっておきたい初期化処理をクラス内で記述する目的に使うこともあるね。
877デフォルトの名無しさん (ワッチョイ 694e-4fyn)
2018/12/30(日) 18:32:12.30ID:bm6ZOgnS0878デフォルトの名無しさん (ワッチョイ 5aad-4fyn)
2018/12/30(日) 18:32:48.87ID:Q7hIiacN0879デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2018/12/30(日) 18:55:41.08ID:31DgsdhN0 >>877
必要な場合は new しても良い。でも、クラス Cxxxの中には、文字列の CString
クラスのオブジェクトや、何らかのリストのオブジェクトが複数含まれて
いたりすることも多い。それらのメンバを全て new する場合と、埋め込み
でそのまま使う場合とでは、Cxxx をインスタンス化するときの時間に雲泥の
差が出てしまう。Cxxx が、5つのクラス・オブジェクトを含んでいた場合、
それらを new するだけで、170 * 5 クロックも余分に掛かってしまう。
この数値には、各コンストラクタの処理時間は含まれていないので。
この場合だと、全て new すると、850 クロックも余計に掛かることになる。
さらに、Cxxx オブジェクトがデストラクトされる場合には、合計で、この
1.8 倍程度の時間が new しない場合より余計に掛かることになってしまう。
必要な場合は new しても良い。でも、クラス Cxxxの中には、文字列の CString
クラスのオブジェクトや、何らかのリストのオブジェクトが複数含まれて
いたりすることも多い。それらのメンバを全て new する場合と、埋め込み
でそのまま使う場合とでは、Cxxx をインスタンス化するときの時間に雲泥の
差が出てしまう。Cxxx が、5つのクラス・オブジェクトを含んでいた場合、
それらを new するだけで、170 * 5 クロックも余分に掛かってしまう。
この数値には、各コンストラクタの処理時間は含まれていないので。
この場合だと、全て new すると、850 クロックも余計に掛かることになる。
さらに、Cxxx オブジェクトがデストラクトされる場合には、合計で、この
1.8 倍程度の時間が new しない場合より余計に掛かることになってしまう。
880デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2018/12/30(日) 19:01:20.20ID:31DgsdhN0 >>872
思い出したので追加しておく。
Little Endian の場合、
>Uint32 u32;
>BYTE u8;
>u8 = (BYTE )u32;
の代わりに、
Uint32 u32;
BYTE u8;
u8 = *(BYTE *)&u32;
という書き方も出来て、こっちの方が、処理効率が良い場合があるとされている。
しかし、BigEndian だとこの書き方は混乱を招きやすく、かつ、処理効率も
上がらないと思われる。
総合的に考えると、Little Endian の方が処理効率が上がりやすいはずだ。
思い出したので追加しておく。
Little Endian の場合、
>Uint32 u32;
>BYTE u8;
>u8 = (BYTE )u32;
の代わりに、
Uint32 u32;
BYTE u8;
u8 = *(BYTE *)&u32;
という書き方も出来て、こっちの方が、処理効率が良い場合があるとされている。
しかし、BigEndian だとこの書き方は混乱を招きやすく、かつ、処理効率も
上がらないと思われる。
総合的に考えると、Little Endian の方が処理効率が上がりやすいはずだ。
881デフォルトの名無しさん (ワッチョイ 3a52-MXej)
2018/12/30(日) 20:44:44.64ID:97KQkPau0882デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/31(月) 19:30:23.55ID:WGWLmLufa cのsetjmpを使ってるコードはc++で例外に置き換えられますか?
883デフォルトの名無しさん (ワッチョイ 9161-h5Ay)
2019/01/01(火) 22:54:34.62ID:H66xOrDI0 >>882
確か、関数呼び出し連鎖の途中の関数が誰も catch せずに放っておけば、
親の関数にまで戻れるはずなので、一応、同じようなことが出来る気もする。
長い間使ってないので、むしろ、setjmp, longjmp がどういうものだったか
の方を忘れてしまったけど。
たしかそれでいけたと思うな・・・。
確か、関数呼び出し連鎖の途中の関数が誰も catch せずに放っておけば、
親の関数にまで戻れるはずなので、一応、同じようなことが出来る気もする。
長い間使ってないので、むしろ、setjmp, longjmp がどういうものだったか
の方を忘れてしまったけど。
たしかそれでいけたと思うな・・・。
884デフォルトの名無しさん (ワッチョイ 81ad-RM76)
2019/01/05(土) 05:14:18.47ID:XzO5Y/Fl0 EASTL - 3.12.08 release
https://github.com/electronicarts/EASTL.git
https://github.com/electronicarts/EASTL.git
885デフォルトの名無しさん (ワッチョイ 8901-ikDe)
2019/01/05(土) 08:34:01.93ID:rov9DpyB0 std::variantって見たんだけどこれいいね。
886デフォルトの名無しさん (ワッチョイ 1301-4rLr)
2019/01/05(土) 09:09:14.58ID:xejHmutN0 型安全なunionか
なかなかいいかも
なかなかいいかも
887デフォルトの名無しさん (ワッチョイ 917c-aDDJ)
2019/01/05(土) 12:12:55.54ID:wMTnOPNR0888デフォルトの名無しさん (ワッチョイ 917c-aDDJ)
2019/01/05(土) 12:13:54.68ID:wMTnOPNR0889デフォルトの名無しさん (ワッチョイ 917c-aDDJ)
2019/01/05(土) 12:14:18.25ID:wMTnOPNR0890デフォルトの名無しさん (ワッチョイ d93d-3A6Y)
2019/01/05(土) 12:21:03.48ID:ZukYwWxe0 やっぱ整数なら下の桁から上の桁に向かって書いたり送ったりするのが自然
上の桁とか(整数という概念上は)何桁まで伸びるかわからないのだから
しかし一方人間の認識上は上の桁から見て量を把握したいという要求があり、
不幸にもラテン語が左から書くのにアラビア数字が右から書く慣習だったため
二つの文化を取り持つ玉虫色の解決策としてビッグエンディアンとかネットワークバイトオーダーみたいなものが生じた
上の桁とか(整数という概念上は)何桁まで伸びるかわからないのだから
しかし一方人間の認識上は上の桁から見て量を把握したいという要求があり、
不幸にもラテン語が左から書くのにアラビア数字が右から書く慣習だったため
二つの文化を取り持つ玉虫色の解決策としてビッグエンディアンとかネットワークバイトオーダーみたいなものが生じた
891デフォルトの名無しさん (ワッチョイ 5394-Fz1M)
2019/01/05(土) 14:23:51.42ID:o23qSFy30 スマホアプリとかのパケット解析するとわりとビッグエンディアン使われてる
892デフォルトの名無しさん (ワッチョイ fb02-cuFO)
2019/01/05(土) 14:47:37.72ID:2c1WII2F0 だってビッグエンディアンはネットワークバイトオーダーでもあるから。
外に出すデータや互換性保ちたいデータは普通そうすると思うよ。
外に出すデータや互換性保ちたいデータは普通そうすると思うよ。
893デフォルトの名無しさん (ワッチョイ 8195-LRU4)
2019/01/05(土) 14:56:34.85ID:Mw4M2zcY0 >>890
アラビア数字書くとき右から書いてるの?変わった人ね
アラビア数字書くとき右から書いてるの?変わった人ね
894デフォルトの名無しさん (ワッチョイ 81ad-RM76)
2019/01/06(日) 10:53:29.24ID:2S4Gmo3N0 数の表記だけじゃないさ。日付、人名、住所の表記も。
単純なASCIIソートで正しくソートできるのはどれかという話にもつながる。
単純なASCIIソートで正しくソートできるのはどれかという話にもつながる。
895デフォルトの名無しさん (ワッチョイ 8901-ikDe)
2019/01/06(日) 13:34:28.45ID:q7b7d/XL0 数値を数字に直すとき桁数を調べるには対数とればいいよ。
896デフォルトの名無しさん (ワッチョイ 917c-aDDJ)
2019/01/06(日) 14:27:57.77ID:UQlfmMBy0 中学生か
897デフォルトの名無しさん (ワッチョイ 51e3-PFih)
2019/01/06(日) 16:25:01.53ID:gVP3A6Xh0 >>895
数学的にはそれで完全に正しい。
しかしコンピュータには誤差があるので、
itoa() や printf() などを自分で実装するような場合、
よく考えないといけないかも知れない。
log_10(x) で計算すると N 桁だということになったとしても、
itoa() などを実装するアルゴリズムによっては、ある条件の時に
誤差によって、1ケタだけずれるかもしれない。
めったに無いことだが、これで銀行システムや戦闘機のシステムが
ダウンしたりするかも知れないので、数学は重要。
数学的にはそれで完全に正しい。
しかしコンピュータには誤差があるので、
itoa() や printf() などを自分で実装するような場合、
よく考えないといけないかも知れない。
log_10(x) で計算すると N 桁だということになったとしても、
itoa() などを実装するアルゴリズムによっては、ある条件の時に
誤差によって、1ケタだけずれるかもしれない。
めったに無いことだが、これで銀行システムや戦闘機のシステムが
ダウンしたりするかも知れないので、数学は重要。
898デフォルトの名無しさん (ワッチョイ 51e3-PFih)
2019/01/06(日) 16:27:31.80ID:gVP3A6Xh0 ちなみにオイラは数学は首席だったが、どういう場合にそれが生じるかは
即答することは出来ない。アルゴリズムを慎重に選ばないと、その誤差によって
システム・ダウンやアプリのハングアップ、保護例外などを引き起こす可能性が
わずかだが存在するかもしれない。
即答することは出来ない。アルゴリズムを慎重に選ばないと、その誤差によって
システム・ダウンやアプリのハングアップ、保護例外などを引き起こす可能性が
わずかだが存在するかもしれない。
899デフォルトの名無しさん (オッペケ Src5-mak3)
2019/01/06(日) 16:32:25.57ID:BCtLt9aar へぇ〜科目毎に首席決まるんだ笑
900さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 16:48:35.20ID:5fyS0TRC0 n>=0かつ10^n <= m < 10^(n+1)
のときに整数mは十進n桁の数と言える。
不等式に常用対数を適用し、
n <= log_10 (m) < n+1
が得られる。つまり、1以上の整数mに常用対数を適用し、さらにガウス記号を適用したものがmの桁数だ。
m=0のときは一桁になることに注意する。
のときに整数mは十進n桁の数と言える。
不等式に常用対数を適用し、
n <= log_10 (m) < n+1
が得られる。つまり、1以上の整数mに常用対数を適用し、さらにガウス記号を適用したものがmの桁数だ。
m=0のときは一桁になることに注意する。
901さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 16:50:11.91ID:5fyS0TRC0 計算結果の桁数が違うときは、常用対数の誤差とガウス記号の誤差の問題になる。
902さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 16:57:04.99ID:5fyS0TRC0 常用対数の誤差については、有効桁数を使うか、区間演算により、誤差の範囲を見積もることが可能。そこで、誤差の範囲が整数をまたぐかどうかを判定すれば、問題は解決する。
903さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 16:59:59.29ID:5fyS0TRC0 整数をまたぐ可能性があるときは実際に整数を文字列化すれば正確な桁数が算出可能。もしくは任意精度の多倍数演算により自由に精度を高めて再計算すればいい。
904さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 17:00:41.37ID:5fyS0TRC0 *多倍長演算*
905さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-YfKw)
2019/01/06(日) 17:07:05.46ID:5LUvK3vXd オイラーは首席だったのか?
906さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-YfKw)
2019/01/06(日) 17:11:34.26ID:5LUvK3vXd NO DATA.
907さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 17:23:51.30ID:5fyS0TRC0 ほら、反論しろよ?
908デフォルトの名無しさん (ワッチョイ 81ff-xhm2)
2019/01/06(日) 17:41:26.55ID:kxJaA4Vn0 ふつー数値から文字列に変換する変換関数そのものに長さを報告させるだろ
文字列の格納先のメモリを確保するときのサイズ見積もりに対数を使う場合は
ワーストケースで誤差が出た場合に備えればいい
文字列の格納先のメモリを確保するときのサイズ見積もりに対数を使う場合は
ワーストケースで誤差が出た場合に備えればいい
909さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 17:44:32.37ID:5fyS0TRC0 具体的なほとんどのプログラムでは常用対数の誤差を一桁以内にすることは可能だろう。
910デフォルトの名無しさん (ワッチョイ a97c-88M8)
2019/01/06(日) 18:06:44.32ID:z+pllqoQ0 ゲームエンジンでおすすめありませんか?
911デフォルトの名無しさん (ワッチョイ 8901-ikDe)
2019/01/06(日) 18:12:46.00ID:q7b7d/XL0 本屋さんにはUnityコーナーがあるよ。
912デフォルトの名無しさん (ワッチョイ a97c-88M8)
2019/01/06(日) 18:19:00.70ID:z+pllqoQ0913デフォルトの名無しさん (ワッチョイ b332-xhm2)
2019/01/06(日) 18:21:40.42ID:mghQxkOO0 >>912
glfw
glfw
914さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 1901-YfKw)
2019/01/06(日) 18:22:16.06ID:5fyS0TRC0 スマホゲームならWebGL一択、ハイエンドならUnity、Unreal Engine、CoCo3D、ローエンドならOpenGL, DirectDraw, Haxeといったところか。
915デフォルトの名無しさん (ワッチョイ a97c-88M8)
2019/01/06(日) 18:34:54.20ID:z+pllqoQ0916デフォルトの名無しさん (ワッチョイ 5161-PFih)
2019/01/06(日) 19:53:45.75ID:viPzIL890 >>908
変換関数そのものをプログラムしたい場合に、あらかじめ桁数が分かって
いる方が便利 or 効率が良い、場合があり、log_10(x)を使用したくなってしまう。
ところがが、log 計算には誤差が有る可能性があるので、その値を過信するのは
問題だと言うことが言いたかった。
例えば、文字列化する際には、多くのアルゴリズムでは、下の方の桁から
決まっていく。しかし、文字列バッファには、上のケタから左詰で入れて
行く必要がある。となると、最初から桁数が分かっていれば、簡単に
プログラムできるのではないかと言う誘惑に駆られてしまう。
後、10で割っていって余りを使う方法は簡単ではあるが、そのアルゴリズム
そのものにも誤差が有る可能性が指摘されている。
変換関数そのものをプログラムしたい場合に、あらかじめ桁数が分かって
いる方が便利 or 効率が良い、場合があり、log_10(x)を使用したくなってしまう。
ところがが、log 計算には誤差が有る可能性があるので、その値を過信するのは
問題だと言うことが言いたかった。
例えば、文字列化する際には、多くのアルゴリズムでは、下の方の桁から
決まっていく。しかし、文字列バッファには、上のケタから左詰で入れて
行く必要がある。となると、最初から桁数が分かっていれば、簡単に
プログラムできるのではないかと言う誘惑に駆られてしまう。
後、10で割っていって余りを使う方法は簡単ではあるが、そのアルゴリズム
そのものにも誤差が有る可能性が指摘されている。
918デフォルトの名無しさん (ワッチョイ 81ff-xhm2)
2019/01/06(日) 20:16:22.17ID:kxJaA4Vn0 >>916
変換関数の中でメモリ割り付けを行うのが好みなのか?
変換関数の中でメモリ割り付けを行うのが好みなのか?
919デフォルトの名無しさん (ワッチョイ d93d-3A6Y)
2019/01/06(日) 20:27:50.31ID:Tw0qXLcy0 んま実際にわ数値の桁数とか型を見たら一発でわかるんですけどねwwwwww
logは人間の感覚特性にマッチした量的尺度を表したり(例:dB)、
情報量の表現に使う(同じものがいっぱいあるという状況は情報量を上げない)という目的が大きい
logは人間の感覚特性にマッチした量的尺度を表したり(例:dB)、
情報量の表現に使う(同じものがいっぱいあるという状況は情報量を上げない)という目的が大きい
920デフォルトの名無しさん (ワッチョイ 8901-ikDe)
2019/01/06(日) 21:04:54.26ID:q7b7d/XL0 HTMLパーサーありますか?
921デフォルトの名無しさん (ワッチョイ 81ff-xhm2)
2019/01/06(日) 21:27:13.56ID:kxJaA4Vn0 >>919
intは何桁だ?
intは何桁だ?
922デフォルトの名無しさん (ワッチョイ 79ab-cEz4)
2019/01/06(日) 22:23:30.07ID:IpTON8AO0923デフォルトの名無しさん (ワッチョイ 5161-PFih)
2019/01/06(日) 22:46:51.25ID:viPzIL890 >>917
前提として浮動小数点数(float/double など) の話だけど、誤差が無いとは言い切れない
事は分かると思う。
誤差を少なくする方法として、10で割ったりせずに、最初から、
10000.0, 1000.0, 100.0, 10.0, 1.0, 0.1, 0.01, 0.001
20000.0, 2000.0, ・・・
30000.0, 3000.0, ・・・
40000.0, 4000,0, ・・・
のようなものを計算しておいて、比較したり引き算したりする方法が
あるそうな。
浮動小数点値の場合、当然かもしれないが log を使わずに、IEEE の仕様を元に
指数部のBIT部分を読んで利用する方がいいらしい。
前提として浮動小数点数(float/double など) の話だけど、誤差が無いとは言い切れない
事は分かると思う。
誤差を少なくする方法として、10で割ったりせずに、最初から、
10000.0, 1000.0, 100.0, 10.0, 1.0, 0.1, 0.01, 0.001
20000.0, 2000.0, ・・・
30000.0, 3000.0, ・・・
40000.0, 4000,0, ・・・
のようなものを計算しておいて、比較したり引き算したりする方法が
あるそうな。
浮動小数点値の場合、当然かもしれないが log を使わずに、IEEE の仕様を元に
指数部のBIT部分を読んで利用する方がいいらしい。
924デフォルトの名無しさん (ワッチョイ 8901-xhm2)
2019/01/07(月) 08:39:12.81ID:4xwPMGVF0 桁数が重要になるような銀行や事務系の話?
それなら10進演算だろ
IEEEでも定義されてる
科学計算だと対数で問題ない
それなら10進演算だろ
IEEEでも定義されてる
科学計算だと対数で問題ない
925デフォルトの名無しさん (ワッチョイ 51e3-PFih)
2019/01/07(月) 13:35:29.03ID:QyN6UiiI0 >>924
自分で printf() を実装する場合の、浮動小数点数を文字列に直す時の話。
自分で printf() を実装する場合の、浮動小数点数を文字列に直す時の話。
926デフォルトの名無しさん (ワッチョイ b332-xhm2)
2019/01/07(月) 13:47:41.82ID:hsoUdh4l0 自分でprintfを実装するとか銀行のシステムを作るよりレアケースだな
927デフォルトの名無しさん (ワッチョイ 81ff-xhm2)
2019/01/07(月) 17:09:10.70ID:Cio2TleD0 ここがC++スレということを忘れて内科医?
printfはオーバーロードできるしグローバル以外の空間にも導入できる
printfはオーバーロードできるしグローバル以外の空間にも導入できる
928デフォルトの名無しさん (ワッチョイ 8901-eTP0)
2019/01/07(月) 20:19:39.05ID:hm6qCAOJ0 そんなことするんじゃねーよカスが。
929デフォルトの名無しさん (ワッチョイ 5167-xhm2)
2019/01/07(月) 23:14:26.87ID:lPhgCzer0 Pythonには素の遅いPythonとJITを使った素のPythonよりとてつもなく速いPythonがあるようですが
Boost.PythonでPythonスクリプトを読み込んで実行した場合は素の遅いPythonの速度になる認識であっているでしょうか?
また、Boost.PythonでJIT版Pythonを実行することは可能でしょうか?
Boost.PythonでPythonスクリプトを読み込んで実行した場合は素の遅いPythonの速度になる認識であっているでしょうか?
また、Boost.PythonでJIT版Pythonを実行することは可能でしょうか?
930デフォルトの名無しさん (ワッチョイ 5161-PFih)
2019/01/09(水) 00:35:27.60ID:I3YK3qiz0 >>929
全然その辺知らないけど、
そもそも、python の言語仕様自体がJITを使ったとしてもC/C++ほどの速度には
ならないはずだし、そもそも NumPy 使わないと遅いということは聞いてる。
大体のスクリプト言語は、言語仕様の段階で例えコンパイル言語化しても
どうすることも出来ない遅さが含まれてしまってる。
全然その辺知らないけど、
そもそも、python の言語仕様自体がJITを使ったとしてもC/C++ほどの速度には
ならないはずだし、そもそも NumPy 使わないと遅いということは聞いてる。
大体のスクリプト言語は、言語仕様の段階で例えコンパイル言語化しても
どうすることも出来ない遅さが含まれてしまってる。
931デフォルトの名無しさん (ワッチョイ 917c-aDDJ)
2019/01/09(水) 11:18:19.67ID:+j6Vua/i0 numpy使えばC並みの速度が出るようにも書けるが
numpy使ったからと言って馬鹿が描くと素のpython以上に遅くなる
numpy使ったからと言って馬鹿が描くと素のpython以上に遅くなる
932デフォルトの名無しさん (ラクッペ MMe5-88M8)
2019/01/09(水) 13:18:31.63ID:ePvWX0K6M 速度なんて誰でも気にしない優しい世界
933デフォルトの名無しさん (ワッチョイ 8901-eTP0)
2019/01/09(水) 19:27:53.32ID:LMntakFz0 用意されてるライブラリ使えと。
バカがイキって作ったライブラリより普通に速いから。
バカがイキって作ったライブラリより普通に速いから。
934デフォルトの名無しさん (ワッチョイ b332-xhm2)
2019/01/09(水) 19:38:55.54ID:P7Qg82S60 numpyの使い方の話ではなく?
935デフォルトの名無しさん (ワッチョイ a97c-88M8)
2019/01/09(水) 20:20:55.44ID:1OkzU/m20 というかスレチでは?
936デフォルトの名無しさん (ワッチョイ 5161-PFih)
2019/01/09(水) 21:54:22.59ID:eG2hyzXv0 ・動的型言語
・自動メモリ管理
・リンクリストと配列を余り区別しない書き方をする人が多い傾向。
これらがあるので、pythonをコンパイル型にしてもある程度以上の高速化は
難しいと思われる。
・自動メモリ管理
・リンクリストと配列を余り区別しない書き方をする人が多い傾向。
これらがあるので、pythonをコンパイル型にしてもある程度以上の高速化は
難しいと思われる。
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- アメップ「ジャップ安すぎワロタ。飛行機代込でもフロリダより東京のディズニー行った方が安いまである」 [649381991]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪★2
- 【悲報】マクベ大佐「いい音色だろ(壺を弾く)」僕副官「統一教会っすかw」マクベ大佐「北宋だ(怒)」 [616817505]
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- じゃあ何券だったら、日本人は満足したんだよ [452836546]
- 朝日新聞記者「中国軍のレーダー照射はこめかみに銃を突きつけられたのと同じ。僕なら反撃して撃墜してる」高市 [931948549]
