次スレを立てる時は本文の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:CdYUXXMG0803デフォルトの名無しさん (ワッチョイ 95b3-6UAB)
2018/12/24(月) 22:54:19.63ID:SeeEk3oh0 Javascriptのほうが速いのにな。
804デフォルトの名無しさん (ワッチョイ ade3-ESEE)
2018/12/24(月) 23:31:10.01ID:RySeMjgB0 >>803
有り得ない。
有り得ない。
805デフォルトの名無しさん (ワッチョイ 95b3-6UAB)
2018/12/24(月) 23:33:25.79ID:SeeEk3oh0 さてはオヌシ、Javascript使ったことござらんな。
806デフォルトの名無しさん (スッップ Sd43-/Sup)
2018/12/24(月) 23:40:50.37ID:osgTLlKWd 何が速いの
807デフォルトの名無しさん (ワッチョイ e35d-ivsE)
2018/12/24(月) 23:56:41.67ID:ckTogqpu0 ガイジやん
808デフォルトの名無しさん (ワッチョイ 23d2-5YD5)
2018/12/25(火) 00:08:46.01ID:66hcSiRr0 new演算子について教えてください。
自分で定義したクラスをインスタンス化してグローバル変数として扱いたいです。
グローバル変数には実体がないといけないと思うのですが、new演算子は
ポインタにしか使えないですよね?
この場合どうしたらいいでしょうか
自分で定義したクラスをインスタンス化してグローバル変数として扱いたいです。
グローバル変数には実体がないといけないと思うのですが、new演算子は
ポインタにしか使えないですよね?
この場合どうしたらいいでしょうか
809デフォルトの名無しさん (ワッチョイ e3a8-9ZqA)
2018/12/25(火) 00:19:05.74ID:wezhkWA50 newなんか使わずそのままグローバル変数として
myclass mc;
とか定義すればよい
myclass mc;
とか定義すればよい
810デフォルトの名無しさん (ワッチョイ 95b3-lUk2)
2018/12/25(火) 00:20:38.06ID:C9xreq1F0811デフォルトの名無しさん (ワッチョイ 037e-q1e7)
2018/12/25(火) 00:27:18.17ID:elDAcQKF0 >>810
wwwwwwwww
wwwwwwwww
812デフォルトの名無しさん (アウアウウー Sac9-zV84)
2018/12/25(火) 00:50:16.50ID:MFQdZUcza 無名関数としてのラムダはないと困る。
813はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-q1e7)
2018/12/25(火) 00:53:54.64ID:HIPAf7J10 >>810
オブジェクトとクロージャはメカニズム的には似たようなもんだ
という感覚は言語処理系に明るい人の感覚としては元々ある。
C++ にラムダ式が追加される前に書かれたこの記事が面白いよ。
"クロージャとオブジェクトの微妙な関係"
http://www.itmedia.co.jp/enterprise/articles/0703/29/news069.html
JavaScript の「オブジェクト」だって、その内実は環境への操作だ。
つまりはクロージャを基礎にしてオブジェクトに見せているんだから、
その逆をやる言語があったって別に不自然なことではなかろ。
オブジェクトとクロージャはメカニズム的には似たようなもんだ
という感覚は言語処理系に明るい人の感覚としては元々ある。
C++ にラムダ式が追加される前に書かれたこの記事が面白いよ。
"クロージャとオブジェクトの微妙な関係"
http://www.itmedia.co.jp/enterprise/articles/0703/29/news069.html
JavaScript の「オブジェクト」だって、その内実は環境への操作だ。
つまりはクロージャを基礎にしてオブジェクトに見せているんだから、
その逆をやる言語があったって別に不自然なことではなかろ。
814デフォルトの名無しさん (ワッチョイ 23d2-5YD5)
2018/12/25(火) 01:47:45.90ID:66hcSiRr0815デフォルトの名無しさん (ワッチョイ cb80-JI52)
2018/12/25(火) 03:05:41.87ID:hUN0giiJ0 クラス・クロージャは、同じ。
関数・メソッドから、引数渡しでもないのに、外側の変数を参照できるから
Ruby のブロックがクロージャ。
ブロックの外側の変数が参照できる
一方、Ruby の関数は、外側の変数を参照できないから、
JavaScript, Python, PHP よりも、すごい強固
Ruby だけは、クロージャの外に、関数をスコープを作っている。
さらに関数の外側がクラスで、クラスの外側がモジュール
モジュール > クラス > メソッド(関数) > ブロック(クロージャ)
Ruby 独特の構造!
関数・メソッドから、引数渡しでもないのに、外側の変数を参照できるから
Ruby のブロックがクロージャ。
ブロックの外側の変数が参照できる
一方、Ruby の関数は、外側の変数を参照できないから、
JavaScript, Python, PHP よりも、すごい強固
Ruby だけは、クロージャの外に、関数をスコープを作っている。
さらに関数の外側がクラスで、クラスの外側がモジュール
モジュール > クラス > メソッド(関数) > ブロック(クロージャ)
Ruby 独特の構造!
816デフォルトの名無しさん (ワッチョイ 4bf2-q1e7)
2018/12/25(火) 17:51:31.77ID:Twr4vy9N0 エディッタだけで、Visual Studioコンパイル済まで持って行けた。。。
817デフォルトの名無しさん (ワッチョイ 2312-OVaG)
2018/12/25(火) 18:10:25.20ID:Ra4BufOa0 サンタさんがくれた素敵な奇跡。だからその瞬間を宝物にして、書き込みしたくなっちゃうんですね
818はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-q1e7)
2018/12/25(火) 18:35:59.59ID:HIPAf7J10 恥ずかしいセリフ禁止!
819デフォルトの名無しさん (ワッチョイ f54e-Wbbf)
2018/12/25(火) 18:44:45.00ID:C73Cga6+0 はちみつ餃子さんってC++を使ってる業務に就いてるんですか?
820はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-q1e7)
2018/12/25(火) 18:50:42.42ID:HIPAf7J10 前にも書いたことあると思うけど、ワイは完全に趣味でやっとる人やで
821デフォルトの名無しさん (ワッチョイ 95b3-lUk2)
2018/12/25(火) 19:33:29.77ID:C9xreq1F0 理解が深まった。ありがとう。
しかし理解すればするほど、c++ならやっぱクラス生成でよくね?って気になるが。
しかし理解すればするほど、c++ならやっぱクラス生成でよくね?って気になるが。
822デフォルトの名無しさん (ワッチョイ 8dc3-d5oK)
2018/12/25(火) 19:48:34.00ID:KqaRCMCm0 クラス生成するのがC++のラムダ式なんだが
823はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-q1e7)
2018/12/25(火) 21:36:34.76ID:HIPAf7J10 >>821
繰返して述べるが、 C++ のラムダ式は単純なクラスの定義と使用を同時に出来る構文糖でしかない。
何故か「クロージャ」と混同した書き込みがあるが
(もちろんいわゆるクロージャの概念からおおいに影響は受けているのだろうが)
C++ のラムダ式は C++ に新しい概念を導入するものではない。
繰返して述べるが、 C++ のラムダ式は単純なクラスの定義と使用を同時に出来る構文糖でしかない。
何故か「クロージャ」と混同した書き込みがあるが
(もちろんいわゆるクロージャの概念からおおいに影響は受けているのだろうが)
C++ のラムダ式は C++ に新しい概念を導入するものではない。
824デフォルトの名無しさん (アウアウウー Sac9-zV84)
2018/12/26(水) 00:41:02.88ID:qfoPSrF6a c++の属性構文が出来たけどc++17で不明な属性は無視するという規定が出来たからには、コンパイラによっては独自の属性があるの?
825デフォルトの名無しさん (ワッチョイ 4bd7-q1e7)
2018/12/26(水) 06:42:20.48ID:GQqJjkng0 > C++ のラムダ式は C++ に新しい概念を導入するものではない。
これはさすがに言い過ぎ
関数型のリテラルという概念は C++98 にはなかった
だから C++11 になったとき新しく憶えた
既存の概念の組み合わせでできているから
割とすんなり憶えられたけどね
これはさすがに言い過ぎ
関数型のリテラルという概念は C++98 にはなかった
だから C++11 になったとき新しく憶えた
既存の概念の組み合わせでできているから
割とすんなり憶えられたけどね
826デフォルトの名無しさん (ドコグロ MM93-ckn8)
2018/12/26(水) 07:11:59.75ID:Y8+MwfS4M 元々各社の属性指定方法を統一化したものだし
827デフォルトの名無しさん (アウアウウー Sac9-6UAB)
2018/12/26(水) 21:22:57.27ID:qfoPSrF6a VC++で[[deprecated]]使ったら警告じゃなくてエラーになっちゃう。
いやまあ正解なんだけどさ・・・
いやまあ正解なんだけどさ・・・
828デフォルトの名無しさん (ワッチョイ b6d7-SF4R)
2018/12/27(木) 10:07:41.48ID:1rJdmURK0 >>827
ん、cl.exe の 19.16.27024.1 では通るが?
ん、cl.exe の 19.16.27024.1 では通るが?
829デフォルトの名無しさん (アウアウウー Sa39-Rqk6)
2018/12/27(木) 18:09:20.50ID:DLCsZ7Bsa 警告になる?
830デフォルトの名無しさん (ワッチョイ b6d7-SF4R)
2018/12/28(金) 06:03:28.17ID:4iocbykD0 ならない
831デフォルトの名無しさん (ワッチョイ b6d7-SF4R)
2018/12/28(金) 06:04:31.02ID:4iocbykD0 つーか、[[deprecated]]って書いてある関数を使っても警告しないのはつまらない
832デフォルトの名無しさん (ワッチョイ 91e3-h5Ay)
2018/12/28(金) 15:46:17.14ID:50PB7VSs0 Emscripten で、マウスの動きに合わせて JS の canvasに直線を描いたりする
ようなGUIプログラムを作って試していて、local auto 変数に確保した
16バイトの char 配列に、sprintf で色の #RRGGBB の文字列を合成
して JS に渡して canvas の context の style に直線の色を設定していた。
で、同時に、KeyDown イベントでで20文字ほどのグラフィック文字列を出して
いた。なお、そっちの方でも、全く同じ関数を使って、上記の色の文字列
を合成していた。
すると不思議なことに、KeyDownイベントで文字列を書いた後は、
必ず、直線の方の色が変わってしまう。必ず青色で書くようにしているはずなのに。
ログをとってみると、
char szBuf[16];
sprintf(szBuf, "#%02X%02X%02X", r, g, b);
で szBuf に対して、最後の 0終端文字が、書き込まれていないことが判明。
よく見ると、KeyDownイベントで色のためではなく、出力したい
文字列そのものの文字の一部が直線描画の方の szBuf の #RRGGBB の直後に
残ったままコピーされているように振舞っていた。
ためしに、sprintf() の命令の直前に、memset(szBuf, 0, 16); とすると
正常化することも確認した。
Emscripten のライブラリの不具合だろうか?
ようなGUIプログラムを作って試していて、local auto 変数に確保した
16バイトの char 配列に、sprintf で色の #RRGGBB の文字列を合成
して JS に渡して canvas の context の style に直線の色を設定していた。
で、同時に、KeyDown イベントでで20文字ほどのグラフィック文字列を出して
いた。なお、そっちの方でも、全く同じ関数を使って、上記の色の文字列
を合成していた。
すると不思議なことに、KeyDownイベントで文字列を書いた後は、
必ず、直線の方の色が変わってしまう。必ず青色で書くようにしているはずなのに。
ログをとってみると、
char szBuf[16];
sprintf(szBuf, "#%02X%02X%02X", r, g, b);
で szBuf に対して、最後の 0終端文字が、書き込まれていないことが判明。
よく見ると、KeyDownイベントで色のためではなく、出力したい
文字列そのものの文字の一部が直線描画の方の szBuf の #RRGGBB の直後に
残ったままコピーされているように振舞っていた。
ためしに、sprintf() の命令の直前に、memset(szBuf, 0, 16); とすると
正常化することも確認した。
Emscripten のライブラリの不具合だろうか?
833デフォルトの名無しさん (ワッチョイ 91e3-h5Ay)
2018/12/28(金) 16:23:41.67ID:50PB7VSs0 char szCol[16];
memset( szCol, 0, 16 );
memset( szCol, 'W', 10 );
szprintf( szCol, ・・・ );
とした場合は、W の文字が残ったままになることも分かった。
memset( szCol, 0, 16 );
memset( szCol, 'W', 10 );
szprintf( szCol, ・・・ );
とした場合は、W の文字が残ったままになることも分かった。
834デフォルトの名無しさん (ワッチョイ 91e3-h5Ay)
2018/12/28(金) 16:55:00.81ID:bcsUwMQ/0 szprintf() の直後に
szCol[7] = 0;
とすると、正常化することも分かった。
szCol[7] = 0;
とすると、正常化することも分かった。
835デフォルトの名無しさん (ワッチョイ 5ad2-4fyn)
2018/12/28(金) 19:27:07.61ID:NSIH2Vow0 C++でクラスポインタにnewしたオブジェクトを配列の様に複数作りたいのですが、
エラーがでてしまいます。
ポインタの宣言
TimerParameter *_timerParameter;
インスタンス化
_timerParameter[_timerSize] = new TimerParameter(time, function, one_loop);
TimerParameterコンストラクタ
TimerParameter::TimerParameter(ULONG time, void(*function)(), bool one_loop)
{
_function = function;
_oneLoop = one_loop;
_timeSpan = time;
resetTimer();
}
自分で作ったTimerParameterクラスをnewして_timerParameterメンバに入れると以下のエラーが発生してしまいます
sketch\timerState.cpp: In member function 'bool TimerState::timerSet(long unsigned int, void (*)(), bool)':
timerState.cpp:14:30: error: no match for 'operator=' (operand types are 'TimerParameter' and 'TimerParameter*')
_timerParameter[_timerSize] = new TimerParameter(time, function, one_loop);
インスタンス化の左辺が適切でないのが原因だと思うのですが、この書き方はダメなのでしょうか?
エラーがでてしまいます。
ポインタの宣言
TimerParameter *_timerParameter;
インスタンス化
_timerParameter[_timerSize] = new TimerParameter(time, function, one_loop);
TimerParameterコンストラクタ
TimerParameter::TimerParameter(ULONG time, void(*function)(), bool one_loop)
{
_function = function;
_oneLoop = one_loop;
_timeSpan = time;
resetTimer();
}
自分で作ったTimerParameterクラスをnewして_timerParameterメンバに入れると以下のエラーが発生してしまいます
sketch\timerState.cpp: In member function 'bool TimerState::timerSet(long unsigned int, void (*)(), bool)':
timerState.cpp:14:30: error: no match for 'operator=' (operand types are 'TimerParameter' and 'TimerParameter*')
_timerParameter[_timerSize] = new TimerParameter(time, function, one_loop);
インスタンス化の左辺が適切でないのが原因だと思うのですが、この書き方はダメなのでしょうか?
836デフォルトの名無しさん (ワッチョイ 1ab3-iuWP)
2018/12/28(金) 19:48:22.38ID:S+ORIZ660 配列の実体がないじゃん
837デフォルトの名無しさん (ワッチョイ 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 常用対数の誤差については、有効桁数を使うか、区間演算により、誤差の範囲を見積もることが可能。そこで、誤差の範囲が整数をまたぐかどうかを判定すれば、問題は解決する。
レス数が900を超えています。1000を超えると表示できなくなるよ。
