【初心者歓迎】C/C++室 Ver.105【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/ >>598
いや、計算量も変わるしアルゴリズムでもあるけど? >>599
計算量でなく計算オーダー
知らずにしゃしゃり出てくるとか ビッグオーが変わるようなのはアルゴリズムの違いだろうけど
ビッグオーがそのままで計算量だけが変わるのはどっちとも言いがたい >>600
より除算回数の少ないアルゴリズムを選択することは現状のCPUは除算が遅いことに対応するわけだからHW依存と言えなくもない
この主張に対してそういった選択はアルゴリズムでもなければオーダーもかわらないと反論しているのですか? 計算量のオーダーが変わらないアルゴリズム的最適化なんていくらでもあるよ 有限の並列度の並列化ってオーダー変わらないけどワザワザ並列化可能なアルゴリズム使うよね どうせO(n)だから配列丸コピしても問題なしっていう馬鹿を思い出したわ。 と言うか最適なオーダーのアルゴリズムなんて殆んど既知だから、オーダー変わるような最適化ってあんまりないよね 車輪の再発明は良く批判されるけど
素数を列挙するプログラムなんて
既に判ってる素数はテーブル参照するのが最適なのに
なんで毎回計算して地球環境破壊に貢献してる訳? 「ROM容量にはテーブル化は最適ではない」
典型的な論点ずらし >>608
素数の話はどっから出てきた?
アルゴリズムの例として挙げたのかも知れんが、
別のスレッドで最近見た気のする話題なので投稿する場を間違えたのかと。
実用プログラムでは「車輪の再発明」は上手いやり方じゃないけど、
低レベルの部分から組み上げたほうが理解が深まるって面はあるでしょ。 >>611
>>608が最適と豪語したから反例挙げてるだけだろ
お前のほうが論点ずらしだよw バイナリデータを、文字列に変換して保持しようとした場合、素直に16進数表記にするのがよい?
データ量倍になるけど >>620
あーそんなのありましたな
ちょっとググったらライブラリも出てきたしよさそう
ありがとうございます それでいいなら%Xで出力するのでも良い気がするね
base64にすると単純な16進表記よりデータ量増えるし、%Xなら余分なライブラリもいらないし
まぁどっちでもいいんだろうけど 嘘言ったわ、base64は6ビットごとに1文字だからデータはこっちのほうが小さいか 8bit→HEX2桁→2倍
8bit→Base64→4/3倍
やろ
一定数以上桁が必要なのでpaddingとかあるし100%ではないが base64なんかビットシフトとテーブルだけで簡単に実装できるし依存ライブラリ増やす必要もないのでは データ量にもよるけど
"\x00\x00\x00\x00..." が一番楽じゃね 何のためにテキストに変換したいのかがわからんとなんとも言えんな
目的によって使える文字種も違うからな Base64 は、HTML でもよく使う
Base64の文字列で、PNG/JPEG画像を、HTMLファイルに直接埋め込める
<img src="data:image/png;base64,xxxxx..." /> base64って7bit通信路通すためのもんでしょ?
textにするならヒューマンリーダブルにするのが無難だと思うけど
そうじゃなけりゃバイナリでいいじゃん
と思った
まぁ好きにしなよ ish みたいなやつで UTF-8 を利用したのをどっかで見たことある >>634
ishなつい
パソコン通信の時代に使ってたけどもう30年近く前なんだな テキストファイルを結合してishでデコードしてえっちなMAGファイルを見てた人は手をあげなさい boost::serializationがお手軽にシリアライズできて便利だなと使いまくってたら、
map系コンテナがあると一気に性能落ちるっぽいんですが、これって当たり前ですかね?
protocol buffersなどの他のシリアライザに替えて解決するものでもなさそうだし、どうしたもんかな… 圧縮してからBase64すればbitチェックも出来てサイズも減って一石二鳥 >>642
やればいいんじゃね?
やれない理由があるならそれ書かないとわからんし 今の組み込みは環境整いすぎてハード触ってる感ないよね 制御的な知識は多少あるから今更Lチカやってもなぁって感じだ >>642
SPRESENSE、Arduinoよりスペックが高いからあまり制約を考えずに触れるからいいよ 組み込みって難しそうなのに年収は総じて低めだよね
オラオラ系Webプログラマとかのほうがマシだったりするし
なんか世知辛い 組み込みで出来る人は多分大企業メーカーのR&Dに転職してっちゃうんじゃないかな。
なんとなくのイメージだけど、組み込みプログラミングが必要な製品の品質管理を考えると、
請負組み込みの会社に開発を頼める範囲ってごく簡単な部分に限られそうだから、
単価が低い仕事が多くなっちゃうのかも。 まあコスト削減のために低スペックハード使うわけだしな。 オラオラ系というよりウェーイ系というほうが表現が適切だろう
ホームページ見ただけでウェーイって叫びながら意識高い開発してる姿が容易に想像できる そもそもここで質問するのが適切か分からないのですが
とりあえずC++っぽいので分かる方がいたら教えてください。
とあるライブラリのビルドスクリプトを叩いたところ以下のようなエラーが出ました。
```
略/filesystem.hpp:784:13: error: no member named 'make_absolute' in 'std::__1::__fs::filesystem::path'
略
```
ファイル名からC++のコンパイルに失敗しているようなのでした。
普段は別の言語を触っておりC++は触ったことがありません。
調べた限り、ヘッダの二重読み込みでエラーになっているとのことでしたが
該当の `filesystem.hpp` には #pragma once が宣言されています。
環境はMacOS 10.15.3で、とりあえず途中でgccを入れ直したりしましたがやはり同じところでコケます。
Mac上で #pragma once が機能するように環境を設定するにはどうしたら良いでしょうか。
よろしくお願い致します。 貼り付けるエラー文言間違い得ました。
```
略/filesystem.hpp:52:9: error: redefinition of 'path'
略
```
です。 >>661-662
とあるライブラリとか言わずにそのライブラリを示して。
初心者はどんな情報が必要か判断する能力がないので、情報を選別してはいかん。
情報を小出しにされるとイライラゲージが上昇しやすいから、
状況を再現可能な情報を提示することを心掛けて。 >> 663
すみません、おっしゃる通りですね。
このライブラリのインストールになります。
github.com/WonderMediaProductions/Maya2glTF 見ないで答えるけど
include path の順番がまずいんじゃね -----sample.h (classAは変更不可)
class A
{ private: virtual void funcX(void) = 0;
public: void funcY(void);
public: void funcZ(void);
};
class B : private A {・・・};
-----
このような関係性で
classBでfuncXとfuncY(内部でfuncXを使用)が不要、funcZが必要な場合
funcXをclassBに追加せずに済む方法があればいいのですが
funcXもclassBに追加するしかないですか? >>668
ありがとうございます
>>669
純粋仮想関数が含まれているので継承しないと使用できません Icon とか継承したクラス造ろうとしたら protected 観たいなエラー出るのですが
無理やり継承する方法はありますか? Ruby では、Forwardable モジュールで、
継承ではなく、包含を使って、インスタンス変数に委譲できる
使えるメソッドも、限定できる。
配列のメソッド中、指定した2つのメソッドだけが使える
@ary = [ ]
def_delegators( :@ary, :push, :pop ) 組み込みプログラマになりたいんだけどオススメの本とかあったら教えてください 組み込みって言っちゃうと範囲が相当広いと思うんだけど具体的に何か目指してるのとかあるの? 機械メーカーで製造やってるんどけどいつか組み込みシステムの部署に行きたいのです C言語は学生の頃少しやった程度ですが、苦Cや新明解C言語などの本で勉強し直しているところ 組み込みは、C
情報処理資格・エンベデッドの教科書を読めば? >>675
先に異動してしまってそこで学ぶ方がいいのでは?
若いなら可能だよ
おっさんならそもそも実務経験なしのスキルは評価されないと思う >>680
転職で考えればまだポテンシャルで採ってもらえる年齢
まぁ30前半までだと思うけど
企業文化にもよるけど可能性はあるんじゃない?
だめもとでいってみて、ダメでもそれが将来のコネになるかもしれないのだから
情熱あるなら動いてみるのが正解だと思うよ >>681
ありがとう。
上司にはいつかは異動したいとは言ってる。後は組み込みやってるところにアピールする必要もあると思うんだ。
だから基礎でもいいから勉強しときたい。 異動先の想定があるなら異動先の人間に聞くのが一番良いんじゃないかな?
話できる機会を作ってもらえるならポテンシャルやモチベーションを見せるチャンスにもなるし
組み込みって業種や企業で文化がだいぶ違うイメージだから自社内異動想定なら自社に目標合わせるのが一番だと思う >>683
聞いたことあるんだけど、プログラミングできなくても設計書読めたらなんとかなりますよーって言われたなぁ。 >>680
29ならもうおっさん
その歳で経験無いなら組み込み系は絶望的 >>684
個人的にはプログラミング的なことなんざ実務やってりゃ嫌でも身につくんでそんな気にしない
素養とか基礎知識はあったほうがそりゃいいけどね
どれくらい部署間の関係性が強いかわからんが他部署出身者はその部門のことをケアした提案とかができるからむしろ重宝するくらい
やる気ある人間にやらせたほうが結果的に効率上がるからそういうのは積極的に対応する
まぁとは言っても企業文化次第ではあるけどねー >>682
勉強するのはもちろん構わない
でもしっかり勉強してから異動とか思ってたら機を逃すから注意ね
上でも言ってるとおり組み込みといっても千差万別で幅広い
組み込みlinuxかRTOSかぐらいは絞らないと float型からdouble型にキャストした際に値が変わってしまうのですが、一般にどうやって対処するのでしょうか。
float f4_sample_t =0.0002;
double f8_sample_t = (double)f4_sample_t;
とすると、0.0002を期待するのですが0.000199****となります。
↓のように、してみましたが0.00199**となってしまいました。
f8_sample_t=(double)((uint)(f4_sample_t*10000))/10000; >>689
簡単に言うと浮動小数の中身は2進数の小数
なのでもともと0.0002を正確に表せない
表示する際に人にわかりやすくするために10進数の小数に変換するが
そのとき何桁まで計算するかで変わってるように見える 0.0002 は循環小数だなぁ。
十進数ではキリのよい小数でも二進数では正確に表せないのはよくあること。
誤差はあるものだという考えで扱わないといけない。
一般には double の仮数部は 52bit の精度だから、この精度の範囲を超えるような (浮動小数点の) 計算は諦めるしかない。
https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
そんでもって計算の内容次第では精度が失われることがあるから、そこらへんも注意が必要。
https://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#%E8%A8%88%E7%AE%97%E8%AA%A4%E5%B7%AE%E3%81%AE%E7%A8%AE%E9%A1%9E
どうやれば出来るという簡単なものではないのでちゃんとした専門書で学ばないといけないと思う。
浮動小数点で計算するのは諦めて速度も諦めるなら
十進小数ライブラリを作るか導入してもいいだろうし、
計算の内容によっては有理数型を導入するとか
まあ出来ることは色々とあるよ。 floatからdoubleへの変換では値は変わらない >>690-693
ありがとうございます。
現時点では理解できてないのですが、厳密に表現出来ない値があるという認識で良いでしょうか。
宣言時にdoubleで0.0002とする場合はその後の積和演算の誤差が問題にならないのですが、こちらの制約上でfloat入力しかできないのでキャストしています。 厳密に表現出来ない値があるのは当たり前
floatやdoubleで表現出来る値は有限通りなんだから floatの中身が元々10進数で簡単に表せる数という事がわかってるなら
doubleにするときに単純なキャストではなく
そういう補正を加えれば良い
10進7桁までならdouble精度に復元出来る >>693
>>689 のは既にfloatの時点で0.0002じゃないんだよなω >>694
許容できる誤差の閾値がどうやって決まってんのか謎だけど
0.0002を救いたいなら例えば入力は10000倍しておくという運用にして
doubleにするときに10000で割るとかね ■ このスレッドは過去ログ倉庫に格納されています