C++相談室 part152
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/07/12(日) 13:42:20.13ID:TX1mpKr6221デフォルトの名無しさん
2020/09/04(金) 17:03:42.03ID:LCYaN/vD どっちのだよ
222デフォルトの名無しさん
2020/09/04(金) 17:11:42.93ID:ML6iv+hM223デフォルトの名無しさん
2020/09/07(月) 16:37:42.90ID:AmzB5PF6 githubなりに落ちてるc++で書かれたアプリなりを読んで勉強しているんだけど、
include無限ループに陥って萎えてしまうのですが、どうしてますか?
mainのinclude沢山→その指定先にもinclude沢山→stlなりのライブラリ(ここは読まずネットでドキュメント読む)
で相当時間食ってしまうまのですけど、コツとかありますか?
include無限ループに陥って萎えてしまうのですが、どうしてますか?
mainのinclude沢山→その指定先にもinclude沢山→stlなりのライブラリ(ここは読まずネットでドキュメント読む)
で相当時間食ってしまうまのですけど、コツとかありますか?
224デフォルトの名無しさん
2020/09/07(月) 16:42:08.11ID:bjXgxZkO includeガードしろ
225デフォルトの名無しさん
2020/09/07(月) 16:54:18.66ID:4QMtZq9v ていうかなぜ初学者なのにいきなりそんな重厚長大なアプリからチャレンジしようとするのか
自分の力量を過大評価しているのではないか
まずヘローワールドとかそういう簡単なとこからはじめなさい
自分の力量を過大評価しているのではないか
まずヘローワールドとかそういう簡単なとこからはじめなさい
226デフォルトの名無しさん
2020/09/07(月) 16:57:38.12ID:x8yvSFtj コンパイル時にg++とかなら-Eオプションつければ
実際のプリプロセッサの処理の結果が確認できる
実際のプリプロセッサの処理の結果が確認できる
227デフォルトの名無しさん
2020/09/07(月) 16:58:04.33ID:3Ozv9Uf+ 読まなきゃいいじゃん
何のために全部読もうとしているのか自問自答したら?
何のために全部読もうとしているのか自問自答したら?
228デフォルトの名無しさん
2020/09/07(月) 17:02:08.59ID:qk/9c7gK >>223
身の丈に合わない巨大なプロジェクトを読もうとしてるか、または愚直に頭から全部読もうとしてないか?
お前さん自身がコンパイラじゃないんだから、頭からすべて把握して読んでいく必要はないぞ。
まともなソースならオブジェクト指向で書かれてるのだから、上位層で大筋を把握しながら必要に応じて深いところに入っていって、有用そうな所や興味があるところだけ詳しく読めば?
ヘッダファイルは使ってるライブラリとかの当たりをつける程度でざっと読み飛ばして、定義を調べたくなったときにIDEの機能で見に行けばいいだろう。
身の丈に合わない巨大なプロジェクトを読もうとしてるか、または愚直に頭から全部読もうとしてないか?
お前さん自身がコンパイラじゃないんだから、頭からすべて把握して読んでいく必要はないぞ。
まともなソースならオブジェクト指向で書かれてるのだから、上位層で大筋を把握しながら必要に応じて深いところに入っていって、有用そうな所や興味があるところだけ詳しく読めば?
ヘッダファイルは使ってるライブラリとかの当たりをつける程度でざっと読み飛ばして、定義を調べたくなったときにIDEの機能で見に行けばいいだろう。
229デフォルトの名無しさん
2020/09/07(月) 17:05:02.17ID:Egt+Qwmp 吊りかも知れないが勉強中とのことなので
マジレスすると
#include の行を一つづつ消してみて(mainに近い方だけ)
消したらどんなコンパイルエラー出るかを観察する
マジレスすると
#include の行を一つづつ消してみて(mainに近い方だけ)
消したらどんなコンパイルエラー出るかを観察する
230デフォルトの名無しさん
2020/09/07(月) 17:07:22.95ID:6+huFxV7 >>228
sshのソース読んでも全くオブジェクト指向じゃないぞ。
sshのソース読んでも全くオブジェクト指向じゃないぞ。
231デフォルトの名無しさん
2020/09/07(月) 17:13:56.93ID:x8yvSFtj あらゆるところで参照したいヘッダファイル↓があるとして
./include/common/hoge.hpp
詳細な実装(深い階層にいるやつ)
./include/hage/chibi/debu/unko.hpp
からそれを読み込むときって
#include "../../../../common/hoge.hpp"
みたいにしてしまっているのですが、もっとまともなやり方はありますか?
./include/common/hoge.hpp
詳細な実装(深い階層にいるやつ)
./include/hage/chibi/debu/unko.hpp
からそれを読み込むときって
#include "../../../../common/hoge.hpp"
みたいにしてしまっているのですが、もっとまともなやり方はありますか?
232デフォルトの名無しさん
2020/09/07(月) 17:18:55.68ID:x8yvSFtj ちなみにCMakeを使っています
233デフォルトの名無しさん
2020/09/07(月) 17:21:09.32ID:ualItUCM なぜSTLは
#include <vector>
などで読み込めるのでしょうか
不思議ですねぇ
#include <vector>
などで読み込めるのでしょうか
不思議ですねぇ
234デフォルトの名無しさん
2020/09/07(月) 17:27:17.02ID:x8yvSFtj ./include/common
をインクルードパスに含めるのは思いついた上で微妙な気がしたから
聞いてます
をインクルードパスに含めるのは思いついた上で微妙な気がしたから
聞いてます
235デフォルトの名無しさん
2020/09/07(月) 17:43:09.75ID:3Ozv9Uf+ まとも〜とか微妙〜とか
そういう表現どう思う?
そういう表現どう思う?
236デフォルトの名無しさん
2020/09/07(月) 17:44:59.68ID:x8yvSFtj ./include/hage/chibi/
配下ではどこからでも見れるようにするとかしたいときはそこの
CMakeLists.txtにインクルードパス指定する
とかしかないんですかね
配下ではどこからでも見れるようにするとかしたいときはそこの
CMakeLists.txtにインクルードパス指定する
とかしかないんですかね
237デフォルトの名無しさん
2020/09/07(月) 19:33:13.69ID:u0REhpNo インクルードガード標準搭載の言語多いのに
ほんと無駄な時間使わせてる言語なんだなって再確認できて辛い
ほんと無駄な時間使わせてる言語なんだなって再確認できて辛い
>>237
マクロによるインクルードガードなんて決まりきった定型文だし、正直 #pragma に載せる必要もないかと…
マクロによるインクルードガードなんて決まりきった定型文だし、正直 #pragma に載せる必要もないかと…
239デフォルトの名無しさん
2020/09/07(月) 20:19:27.09ID:h3kjQIhT まあね、GUIDなら衝突の確率340澗分の1だかんな
それすらも衝突したらどうすんだと・・・ほとんど病気だねw
それすらも衝突したらどうすんだと・・・ほとんど病気だねw
240デフォルトの名無しさん
2020/09/07(月) 20:40:39.15ID:x8yvSFtj >まとも〜とか微妙〜とか
なんとも思わねえよばあか
なんとも思わねえよばあか
241デフォルトの名無しさん
2020/09/07(月) 21:32:21.88ID:kH2Fy/8z そっか君プログラマ向いてないね
知らなくて驚くかもしれないけどコンピュータには感覚じゃなくて理屈しか通じないんだよ
知らなくて驚くかもしれないけどコンピュータには感覚じゃなくて理屈しか通じないんだよ
243デフォルトの名無しさん
2020/09/08(火) 00:30:42.07ID:h4K4tlm9 誰がプログラマって言ったよ?
理屈しか通じないんだろ?
頭悪そう
理屈しか通じないんだろ?
頭悪そう
244デフォルトの名無しさん
2020/09/08(火) 00:32:32.14ID:h4K4tlm9 自分で言ってることに矛盾してる時点で才能ないよ君
245デフォルトの名無しさん
2020/09/08(火) 16:47:11.08ID:FxZYRSTV is_integralみたいな型判定をメタ関数に渡すとこを書いてて思ったんだが
変数テンプレートをテンプレート・テンプレートパラメータとして渡せるようにはなってないんだよなぁ
ということは、と思ってコンセプトの予定されてる内容調べたら、コンセプトも同様なんだな・・残念
変数テンプレートをテンプレート・テンプレートパラメータとして渡せるようにはなってないんだよなぁ
ということは、と思ってコンセプトの予定されてる内容調べたら、コンセプトも同様なんだな・・残念
246デフォルトの名無しさん
2020/09/10(木) 08:49:56.48ID:ke8OXyHN C++でもNPMみたいなパッケージマネージャ使いたい
ヘッダと実装別で書かなきゃいけないのも無駄
このへん解決したAlterC++みたいなの作って
ヘッダと実装別で書かなきゃいけないのも無駄
このへん解決したAlterC++みたいなの作って
247デフォルトの名無しさん
2020/09/10(木) 09:32:44.42ID:xgcscVfX248はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 09:34:27.99ID:LwYTdpan >>246
ヘッダファイルを実装とは別に用意する仕組みは効率よく差分ビルドするための仕組みとして機能していたんだけど、
テンプレートが登場してからは足を引っ張るようになってるとは思う。
まあ単純に面倒くさいってのもわかる。
パッケージマネージャはディストリビューションに乗ってるものを使いたまえよ。
実行環境の管理と開発環境の管理は要求されるものが本来は違うのだけど、
C/C++ は特権階級的な立場だから実行環境を開発環境として使えるようになってることが多い。
あえて分離したいなら CONAN が有名かなぁ……。 使ったことないけど。
https://conan.io/
ヘッダファイルを実装とは別に用意する仕組みは効率よく差分ビルドするための仕組みとして機能していたんだけど、
テンプレートが登場してからは足を引っ張るようになってるとは思う。
まあ単純に面倒くさいってのもわかる。
パッケージマネージャはディストリビューションに乗ってるものを使いたまえよ。
実行環境の管理と開発環境の管理は要求されるものが本来は違うのだけど、
C/C++ は特権階級的な立場だから実行環境を開発環境として使えるようになってることが多い。
あえて分離したいなら CONAN が有名かなぁ……。 使ったことないけど。
https://conan.io/
249デフォルトの名無しさん
2020/09/10(木) 13:27:37.52ID:ke8OXyHN >実行環境を開発環境として使えるようになってることが多い
これは古い慣習でそうなってるだけで実は分けたほうが便利な気がする
システム汚さないし、依存関係の解決も楽
そもそも実行環境に不要なはずのものがいることがおかしい
ConanもC++20のModuleも良さそうだけど結局バベルの塔だからなぁ
これは古い慣習でそうなってるだけで実は分けたほうが便利な気がする
システム汚さないし、依存関係の解決も楽
そもそも実行環境に不要なはずのものがいることがおかしい
ConanもC++20のModuleも良さそうだけど結局バベルの塔だからなぁ
250デフォルトの名無しさん
2020/09/10(木) 13:37:57.10ID:wdhKSMlq251デフォルトの名無しさん
2020/09/10(木) 13:58:43.59ID:h1ZKqHov >>246
VCPKGがあるじゃないか。
VCPKGがあるじゃないか。
252はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 15:13:20.95ID:LwYTdpan253デフォルトの名無しさん
2020/09/10(木) 16:03:33.34ID:wdhKSMlq 変になるって、具体的に何?
254デフォルトの名無しさん
2020/09/10(木) 18:50:19.73ID:6Z343NeL255デフォルトの名無しさん
2020/09/10(木) 18:55:15.35ID:h1ZKqHov VSがクロス一番楽。
256デフォルトの名無しさん
2020/09/10(木) 18:56:59.66ID:h1ZKqHov C/C++はコンパイラメーカーがローダーを用意していない。
これに尽きる。
これに尽きる。
257デフォルトの名無しさん
2020/09/10(木) 19:04:13.58ID:wOYL1pS0 最近は何でもdockerに突っ込んでいる。
vscode + remote containerで開発環境の構築も楽になったし。
vscode + remote containerで開発環境の構築も楽になったし。
258デフォルトの名無しさん
2020/09/10(木) 19:05:01.58ID:ke8OXyHN C++ moduleってテンプレート使ったクラスをモジュール化したとき
プリコンパイルヘッダと原理的に同じで機械語じゃなくて中間表現に
変換されるらしいんだけど、これってコンパイル速度が大幅に改善することはない
ってことだよね?
プリコンパイルヘッダと原理的に同じで機械語じゃなくて中間表現に
変換されるらしいんだけど、これってコンパイル速度が大幅に改善することはない
ってことだよね?
259デフォルトの名無しさん
2020/09/10(木) 19:13:48.12ID:6Z343NeL よく考えたインクルードでpch併用してるプロジェクトなら、普段のビルド大して変わらんかもだけど
pchが依存するヘッダを書き換えた場合のフルビルドみたいなのは避けやすくなるぽい??
pchが依存するヘッダを書き換えた場合のフルビルドみたいなのは避けやすくなるぽい??
260デフォルトの名無しさん
2020/09/10(木) 19:13:59.29ID:ke8OXyHN プリコンパイルヘッダを試しに生成するのと
普通にコンパイルするのと試したら2割程度しか時間短縮できなかった
普通にコンパイルするのと試したら2割程度しか時間短縮できなかった
261はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 21:58:54.33ID:LwYTdpan262デフォルトの名無しさん
2020/09/10(木) 22:37:36.67ID:ke8OXyHN うーん まぁチリツモと考えるとでかいか
夢見過ぎだったか
夢見過ぎだったか
263はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 23:28:14.82ID:LwYTdpan264デフォルトの名無しさん
2020/09/10(木) 23:45:25.82ID:EIogAYj0 質問ですが
double x = 0.3333;
printf("x=%f\n", x); // 期待する表示: x=0.3333
みたいなBCD風表記→IEEE 754→再びBCD風表記
としたときに、元の表記と結果の表記が一致することは
保証されてますん?
double x = 0.3333;
printf("x=%f\n", x); // 期待する表示: x=0.3333
みたいなBCD風表記→IEEE 754→再びBCD風表記
としたときに、元の表記と結果の表記が一致することは
保証されてますん?
265はちみつ餃子 ◆8X2XSCHEME
2020/09/11(金) 00:13:13.30ID:iGbGHAE2266デフォルトの名無しさん
2020/09/11(金) 00:15:27.86ID:ajBE7peV されてない
267デフォルトの名無しさん
2020/09/11(金) 00:22:49.83ID:WOjxtKnw 不可逆変換
268デフォルトの名無しさん
2020/09/11(金) 00:27:13.22ID:1mBomO61 何がしたいんだろな。
269デフォルトの名無しさん
2020/09/11(金) 00:31:20.53ID:hb2JlHSF ちょっソ───スコ───ドに0.3333と書いたのに
0.33331とかに解釈になったらスゲーまずくね??
0.33331とかに解釈になったらスゲーまずくね??
270デフォルトの名無しさん
2020/09/11(金) 00:38:43.10ID:ajBE7peV 初心者スレは別にあるだろ
271デフォルトの名無しさん
2020/09/11(金) 00:40:37.59ID:OVJtRCSC さすがにもう少し精度が高くて、doubleなら
0.3333000000000001 くらいの誤差じゃない?(適当)
0.3333000000000001 くらいの誤差じゃない?(適当)
272デフォルトの名無しさん
2020/09/11(金) 00:41:20.87ID:hb2JlHSF 何がしたいのかというと実行時計算ができる有理数クラスを書いたんじゃが
ソース値がソースコードに浮動小数点で書かれていた場合は当たり障りのない有理数にしたいわけで、
たとえば
Rational x = 0.11;
と書けば済むところはそのまんま
x.m_num == 11LL // 分子
x.m_den == 100LL // 分母
とかになってホスイ
(必ずいちいちRational x = Rational(11, 100);と書かなければならないことはユーザー(≒漏れ自身)に強制したくない
ソース値がソースコードに浮動小数点で書かれていた場合は当たり障りのない有理数にしたいわけで、
たとえば
Rational x = 0.11;
と書けば済むところはそのまんま
x.m_num == 11LL // 分子
x.m_den == 100LL // 分母
とかになってホスイ
(必ずいちいちRational x = Rational(11, 100);と書かなければならないことはユーザー(≒漏れ自身)に強制したくない
273デフォルトの名無しさん
2020/09/11(金) 00:43:42.19ID:hb2JlHSF つかソースコードに書かれた浮動小数点数を文字列化して元に戻せることの重要性を
書いたコンパイラの教科書はマイナーかもしれんが実在したで(記憶モード
そのやり方こそ今思い出すべきなのだが手元に無いから質問すた、
書いたコンパイラの教科書はマイナーかもしれんが実在したで(記憶モード
そのやり方こそ今思い出すべきなのだが手元に無いから質問すた、
274デフォルトの名無しさん
2020/09/11(金) 00:44:51.33ID:ajBE7peV >>272
ユーザ定義リテラルでも作れば?
ユーザ定義リテラルでも作れば?
275デフォルトの名無しさん
2020/09/11(金) 00:45:17.34ID:OVJtRCSC 固定小数点?
276デフォルトの名無しさん
2020/09/11(金) 00:50:39.51ID:hb2JlHSF >>274
やだ
数値的にやるとしたらここ↓のalmost_equal<T>()でも使ってゴニョれば良いんかのう…
https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon
しかし件の本にはこれと似たような演算を書いてあったような気がしないOTL
やだ
数値的にやるとしたらここ↓のalmost_equal<T>()でも使ってゴニョれば良いんかのう…
https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon
しかし件の本にはこれと似たような演算を書いてあったような気がしないOTL
277デフォルトの名無しさん
2020/09/11(金) 00:54:13.41ID:ajBE7peV278デフォルトの名無しさん
2020/09/11(金) 00:59:52.73ID:ajBE7peV279デフォルトの名無しさん
2020/09/11(金) 01:08:43.17ID:hb2JlHSF >>278
しらそん
桁の十分不十分は応用にもよるし
足りないとわかったらRationalの方を多数桁対応させるは
とにかくRationalは見かけをdouble型と同様に扱えるように仕上げ鯛、
なぜなら真に走らせたいアルゴリズムはdoubleをtypedefして作ってあって、
それをRationalに差し替えるだけ!と思ってたら
単体テストが10億行ぐらい浮動小数点で書いてあったので…
しらそん
桁の十分不十分は応用にもよるし
足りないとわかったらRationalの方を多数桁対応させるは
とにかくRationalは見かけをdouble型と同様に扱えるように仕上げ鯛、
なぜなら真に走らせたいアルゴリズムはdoubleをtypedefして作ってあって、
それをRationalに差し替えるだけ!と思ってたら
単体テストが10億行ぐらい浮動小数点で書いてあったので…
280デフォルトの名無しさん
2020/09/11(金) 01:27:41.74ID:ajBE7peV281デフォルトの名無しさん
2020/09/11(金) 01:52:30.29ID:tAPrmVM5 文字列受け取るコンストラクタ書くだけだろ
282デフォルトの名無しさん
2020/09/11(金) 03:35:25.76ID:iBiKDQ69 char配列に変換して8バイト読み書きするだけのこと
文字列に変換することは忘れろ
文字列に変換することは忘れろ
283デフォルトの名無しさん
2020/09/11(金) 12:52:59.43ID:WJYUzgW7 そもそも0と0.0を区別する方法がないのにどこまで意味のある事なのか
284デフォルトの名無しさん
2020/09/11(金) 15:59:42.05ID:Cxw4gZ+X > (必ずいちいちRational x = Rational(11, 100);と書かなければならないことはユーザー(≒漏れ自身)に強制したくない
無理だろ
Rational x = 0.1;
こんなの、どうすんだよ?
double型の0.1は1/10じゃねえぞ
無理だろ
Rational x = 0.1;
こんなの、どうすんだよ?
double型の0.1は1/10じゃねえぞ
285デフォルトの名無しさん
2020/09/11(金) 16:00:39.94ID:Cxw4gZ+X denが必ず10のべき、みたいなことにして
誤差が最小になるように頑張るならともかく
誤差が最小になるように頑張るならともかく
286デフォルトの名無しさん
2020/09/11(金) 16:17:57.96ID:FpD9K4HS >>272
Rational x = "0.11"; を許せばいい
Rational x = "0.11"; を許せばいい
287デフォルトの名無しさん
2020/09/11(金) 16:29:19.36ID:6r5prnWG >>279
仮にテストコードに 0.333333333333333 って書いてあったとしても
それは 0.3333333333333329818 のことだから、
0.333333333333333として受け取ってしまうと逆にテストに失敗するのでは?
仮にテストコードに 0.333333333333333 って書いてあったとしても
それは 0.3333333333333329818 のことだから、
0.333333333333333として受け取ってしまうと逆にテストに失敗するのでは?
288デフォルトの名無しさん
2020/09/11(金) 16:36:45.19ID:G2VX17rJ 10億行ぐらい既存テストコードがあるとのことなので文字列とか全面書き換えになる案はNGなんでしょう
でもいい案はなさげ
一旦浮動小数になったら元のリテラルの復元はできないだろうな
でもいい案はなさげ
一旦浮動小数になったら元のリテラルの復元はできないだろうな
289デフォルトの名無しさん
2020/09/11(金) 16:39:43.52ID:su+TWEMf >文字列とか全面書き換え
Rational にする書き換えはOKなんだろ
Rational にする書き換えはOKなんだろ
290デフォルトの名無しさん
2020/09/11(金) 16:43:40.92ID:G2VX17rJ そりゃクラスの差し替えは局所的な置き換えで済むんじゃないの
浮動小数のリテラルを全部文字列に置き換えることに比べたら楽でしょ
まぁ本人が答えるべきだが状況はなんとなく推測できる
浮動小数のリテラルを全部文字列に置き換えることに比べたら楽でしょ
まぁ本人が答えるべきだが状況はなんとなく推測できる
291デフォルトの名無しさん
2020/09/11(金) 20:04:14.01ID:ua52u3Jr そのくらい正規表現で置換すればいいだろ。
だいたい10億行のテストコードが仮に本当なら100%手書きじゃないから一つずつ確認しながら置換するなんてアホなことはしない。
有理数クラスなんて普通は枯れたライブラリ拾って来るけどな
だいたい10億行のテストコードが仮に本当なら100%手書きじゃないから一つずつ確認しながら置換するなんてアホなことはしない。
有理数クラスなんて普通は枯れたライブラリ拾って来るけどな
292デフォルトの名無しさん
2020/09/11(金) 20:18:44.50ID:G2VX17rJ だからさ、そこは本人の希望なんだからあれこれ言ってもしかたないじゃん
正規表現で機械的に置き換えたらまずいものもあるかもしれないし
浮動小数と有理数で切り替えたいって言ってるからそのメンテコストもあるだろ
正規表現で機械的に置き換えたらまずいものもあるかもしれないし
浮動小数と有理数で切り替えたいって言ってるからそのメンテコストもあるだろ
293デフォルトの名無しさん
2020/09/11(金) 21:28:10.16ID:opulvzCM ユーザー定義リテラルとか使ってboost::rationalでも生成したら?
やったことないからできるか知らんが。
やったことないからできるか知らんが。
294デフォルトの名無しさん
2020/09/11(金) 21:35:23.73ID:em6XQ5sn 何にせよdoubleになった時点でリテラル表記の情報は失われるんだから、何がしかの書き換えをするしかない
それがイヤだ絶対やらんと言うなら、じゃあ不可能だよという答えにしかならない
それがイヤだ絶対やらんと言うなら、じゃあ不可能だよという答えにしかならない
295デフォルトの名無しさん
2020/09/11(金) 21:51:53.86ID:aT3N5bZo プリプロセッサを書けばどうだろう
296デフォルトの名無しさん
2020/09/11(金) 22:53:08.79ID:3mrNom4D Rational に double の数値が直代入されてるところだけ文字列代入にするための
プリプロセッサ描けば良い話
プリプロセッサ描けば良い話
297デフォルトの名無しさん
2020/09/12(土) 05:53:05.89ID:2ljmp3qW 結論から言うと、
IEEE 754の値x → 10進数文字列 s→ IEEE 754の値x'
という変換を行った場合、x == x'となるかどうかはx次第であって一般に保証されないが、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
という変換は、sが非正規化数だったりIEEE 754の仮数部で表現可能な桁数を超えない限り -- (1)
s == s'を保証可能
なぜなら、(1)の条件を満たすsとそのIEEE 754への変換結果xの食い違う条件は
sを2進数に変換したとき循環小数になる場合に限られるが(もとの10進数のsはもちろん循環小数ではない
この食い違いは±DBL_MINを超えないから以下略
(結局x→s'変換はalmost_equal<T>()的な処理が必要にはなるが、適切にやれば
sの整数部の文字列化 ==> x -= (xの整数部) ==> x *= 10、
の反復を何時やめればよいか確定する
IEEE 754の値x → 10進数文字列 s→ IEEE 754の値x'
という変換を行った場合、x == x'となるかどうかはx次第であって一般に保証されないが、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
という変換は、sが非正規化数だったりIEEE 754の仮数部で表現可能な桁数を超えない限り -- (1)
s == s'を保証可能
なぜなら、(1)の条件を満たすsとそのIEEE 754への変換結果xの食い違う条件は
sを2進数に変換したとき循環小数になる場合に限られるが(もとの10進数のsはもちろん循環小数ではない
この食い違いは±DBL_MINを超えないから以下略
(結局x→s'変換はalmost_equal<T>()的な処理が必要にはなるが、適切にやれば
sの整数部の文字列化 ==> x -= (xの整数部) ==> x *= 10、
の反復を何時やめればよいか確定する
298デフォルトの名無しさん
2020/09/12(土) 05:55:29.22ID:2ljmp3qW299デフォルトの名無しさん
2020/09/12(土) 08:39:01.67ID:U5yMllJ4 sagemathで
a=0.11
QQ(a)
とすると
11/100
が得られる
aの実体はMPFRのオブジェクト
まーsagemathのソースでも見とけば
a=0.11
QQ(a)
とすると
11/100
が得られる
aの実体はMPFRのオブジェクト
まーsagemathのソースでも見とけば
300デフォルトの名無しさん
2020/09/12(土) 15:38:22.68ID:cDX1Q2rT >>297
的外れ
的外れ
301デフォルトの名無しさん
2020/09/12(土) 15:47:40.14ID:JdE/Bv85 >>297
その前にリテラル表現→double値(お前が言うところのIEEE754の値)
という変換が入って、それが不可逆だから書き換えなしじゃ無理だっつってんだよ
Hoge(0.0)とHoge(0.00)に表現に応じた別の処理させるのはC++の範囲では不可能だ
その前にリテラル表現→double値(お前が言うところのIEEE754の値)
という変換が入って、それが不可逆だから書き換えなしじゃ無理だっつってんだよ
Hoge(0.0)とHoge(0.00)に表現に応じた別の処理させるのはC++の範囲では不可能だ
302デフォルトの名無しさん
2020/09/12(土) 15:50:40.29ID:cDX1Q2rT プリプロセッサなら可能
Cの仕様
Cの仕様
303デフォルトの名無しさん
2020/09/12(土) 15:54:45.19ID:JdE/Bv85 ああ、#で文字列化できるからこの場合はできるのか忘れてた
まあ対象の浮動小数を全部マクロで括らないといけないからどっちみち書き換えは発生するけどな
まあ対象の浮動小数を全部マクロで括らないといけないからどっちみち書き換えは発生するけどな
304デフォルトの名無しさん
2020/09/12(土) 15:56:41.81ID:cDX1Q2rT おまえプリプロセッサが何か判ってないだろ
305デフォルトの名無しさん
2020/09/12(土) 15:59:56.68ID:JdE/Bv85 ん?シンボルを文字列化する#演算子はプリプロセッサディレクティブの一つだぞ
何か間違ってるか?
何か間違ってるか?
306デフォルトの名無しさん
2020/09/12(土) 16:08:00.10ID:idwadC/M 問題はそこじゃない
307デフォルトの名無しさん
2020/09/12(土) 16:17:43.12ID:JdE/Bv85 絡んでくるだけで具体的な問題を指摘できないカスは置いといて
プリプロセッサフェーズの後で0.0と0.00を区別する方法はないから279君の望みは叶わないでFA
プリプロでもdouble x = 0.00;とかを自動で書き換えるの無理でしょ
プリプロセッサフェーズの後で0.0と0.00を区別する方法はないから279君の望みは叶わないでFA
プリプロでもdouble x = 0.00;とかを自動で書き換えるの無理でしょ
308デフォルトの名無しさん
2020/09/12(土) 16:19:33.34ID:idwadC/M プリプロセッサを書けと言っている
309デフォルトの名無しさん
2020/09/12(土) 16:28:52.93ID:erdZI+Jx >>299
有理数の分母が10の冪という前提ならある程度の精度で出来そうだな。
有理数の分母が10の冪という前提ならある程度の精度で出来そうだな。
310デフォルトの名無しさん
2020/09/12(土) 17:27:31.95ID:JdE/Bv85 分母仮定せずに普通にディオファントス近似した方が誤差小さくなると思うんだけど
311デフォルトの名無しさん
2020/09/12(土) 17:57:13.06ID:erdZI+Jx 10進リテラルで渡す前提なら分母が10の冪になってしまったら逆に誤差が大きいことになると思うが。
#約分とかは別として。
まぁ、1.0/3.0みたいなものも渡せるようにということなら確かにそうかも。
#約分とかは別として。
まぁ、1.0/3.0みたいなものも渡せるようにということなら確かにそうかも。
312デフォルトの名無しさん
2020/09/12(土) 20:28:37.72ID:2ljmp3qW とりあえずここまではできた;;
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=1233456699999999/10000000000000 // NG
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456788999999/10000000000000 // NG
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=1233456699999999/10000000000000 // NG
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456788999999/10000000000000 // NG
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
313デフォルトの名無しさん
2020/09/12(土) 20:35:15.16ID:2ljmp3qW わかったことは、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
において、s→xのところで仮数部最小桁で丸めがおきたのかどうかの情報が無いと
xからsの復元が難しいケースがあるというこっちゃorz
コンパイラならs→xをやるのは自分自身なので、x→s'を行うライブラリと手を握ってうまいことやれる可能性があるが
xを与えられるだけのユーザープログラムではこれは対処が難しい
Ad-hocに.999999 = 1とみなす系のAd-hocな処置が必要かも試練、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
において、s→xのところで仮数部最小桁で丸めがおきたのかどうかの情報が無いと
xからsの復元が難しいケースがあるというこっちゃorz
コンパイラならs→xをやるのは自分自身なので、x→s'を行うライブラリと手を握ってうまいことやれる可能性があるが
xを与えられるだけのユーザープログラムではこれは対処が難しい
Ad-hocに.999999 = 1とみなす系のAd-hocな処置が必要かも試練、
314デフォルトの名無しさん
2020/09/12(土) 20:45:44.57ID:JdE/Bv85 だからさ
例えばそれでrt=1233456699999999/10000000000000になったとして
どうやって元の表現が123.34567だったって判断するのさ
本当に123.345699999999って書かれてた場合と区別できるわけないんだけどどうするの?
123.34567を123.345699999999に間違えるのはダメだけど逆は許されるの?どうして?どういう仮定置いてるの?
その辺を何一つハッキリさせないまま勝手にやられても
何がしたいのか全くわからない
例えばそれでrt=1233456699999999/10000000000000になったとして
どうやって元の表現が123.34567だったって判断するのさ
本当に123.345699999999って書かれてた場合と区別できるわけないんだけどどうするの?
123.34567を123.345699999999に間違えるのはダメだけど逆は許されるの?どうして?どういう仮定置いてるの?
その辺を何一つハッキリさせないまま勝手にやられても
何がしたいのか全くわからない
315デフォルトの名無しさん
2020/09/12(土) 20:52:26.12ID:EJqlmNG1 まぁそんな追い込まんでも
自分で手を動かしてダメっぽいことい気づいたのは立派だよ
自分で手を動かしてダメっぽいことい気づいたのは立派だよ
316デフォルトの名無しさん
2020/09/12(土) 20:53:34.39ID:U5yMllJ4317デフォルトの名無しさん
2020/09/12(土) 20:54:09.24ID:2ljmp3qW >>314
>本当に123.345699999999って書かれてた場合と区別できるわけない
思い込みが激しいお人じゃ…
123.345699999999はギリ仮数部で表現可能な桁数に収まっているから
これは123.34569とは明確に区別可能
ていうか実際のところできたわ;;
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=12334567/100000
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456789/10000000
x=123.345699999999: rt=123345699999999/1000000000000
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
>本当に123.345699999999って書かれてた場合と区別できるわけない
思い込みが激しいお人じゃ…
123.345699999999はギリ仮数部で表現可能な桁数に収まっているから
これは123.34569とは明確に区別可能
ていうか実際のところできたわ;;
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=12334567/100000
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456789/10000000
x=123.345699999999: rt=123345699999999/1000000000000
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
318デフォルトの名無しさん
2020/09/12(土) 20:59:43.51ID:JdE/Bv85 そりゃ0.00002も差があれば区別できるに決まってるわな
いやまあ自分が書き間違えたのが悪いんだけど結局何が問題だか全く理解してないのね
いやまあ自分が書き間違えたのが悪いんだけど結局何が問題だか全く理解してないのね
319デフォルトの名無しさん
2020/09/12(土) 21:00:56.75ID:2ljmp3qW320デフォルトの名無しさん
2020/09/12(土) 21:08:30.19ID:EJqlmNG1 0.500000000000000166533453693773481063544750213623046875
これできる?
これできる?
321デフォルトの名無しさん
2020/09/12(土) 21:09:20.40ID:JdE/Bv85 別のリテラル表現が同じdouble値(IEEE754の値)を示す時に何をもって正しいとするかという
お前の勝手な俺様基準を何も説明しないまま公衆の面前でガチャガチャやってることが問題なんだよ
わかれ
お前の勝手な俺様基準を何も説明しないまま公衆の面前でガチャガチャやってることが問題なんだよ
わかれ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★7 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【食】「シャウエッセンは焼くべからず」暗黙のルールを破り売上高過去最高…日本ハム社員たちが「夜味」にかけた情熱 [ぐれ★]
- 死にたい
- ニュース「日中関係の冷え込み」
- 国民「物価高なんとかして」自民党「デフレ脱却!」
- 【朗報】南鳥島のレアアース、中国産の「20倍の純度」青山繁晴氏「日本は資源大国」日本復活のファンファーレが鳴り響く! [673057929]
- 月がきれいですね。
- __AIPACから遠隔操作まで理解、他におらず? [827565401]
