0020デフォルトの名無しさん2020/03/28(土) 16:10:38.05ID:jYzb+dLM Visual Studio C++ 2019 にて、パフォーマンスプロファイラーを使うと、 __CheckForDebuggerJustMyCode という関数が呼び出されていて結構な負荷になっています。
ありがとう 0023◆QZaw55cn4c 2020/03/28(土) 20:30:35.53ID:WJROMx30 江添氏 C++ 入門にまた誤りを見つけました https://ezoeryou.github.io/cpp-intro/#nannot-a-number > int main() { > double NaN = std::numeric_limits<double>::quiet_NaN() ; > // true > bool b = NaN != 0.0 ; > // false > bool a = NaN == 0.0 ; > bool c = NaN == NaN ; > bool d = NaN != NaN ; > bool e = NaN < 0.0 ; >} こちらで試してみると、bool c = NaN != NaN の値は true でした。 https://ideone.com/dzmyeq
>整数であれば、'a == b'がfalseであるならば、'a != b'なのだと仮定してもよいが、こと浮動小数点数の場合、NaNの存在があるために必ずしもそうとは限らない。 残念ながら、a, b, のいずれかまたは両方が Nan であっても、a == b が false ならば a != b true であることを確かめました
江添さん、だいじょうぶですかね? 0024◆QZaw55cn4c 2020/03/28(土) 20:33:39.15ID:WJROMx30 失礼 ×bool c = NaN != NaN の値は true でした。 ○bool d = NaN != NaN の値は true でした。 訂正箇所は他にはなく、「a == b が false ならば a != b true であることは、double a, b が NaN であってもいえる」 0025デフォルトの名無しさん2020/03/28(土) 23:03:59.81ID:TAn8n6A3 3/14は円周率の日 とくに2015年はアメリカ式日付表記で3/14/15なので100年に1回だったという、
class Impl() : public If { public: Impl() {} ~Impl() {} void func() {} };
のようにすると思いますが、Implクラスをさらに基底クラス(ImplBase)と2種類の派生クラス(ImplA, ImplB)に分けたい場合、 多重継承以外でやるには、どうするのが良いでしょうか? まず If を ImplBase に継承させて、次に ImplBase を ImplA と ImplB に継承させる事になるでしょうか? その場合、純粋仮想関数func()はどのように書くべきでしょうか? ImplBase も virtual void func()としておいて ImplA で実装するのでしょうか? 0031デフォルトの名無しさん2020/03/29(日) 02:19:11.85ID:p3fh4h77 constexprの中二女子亡くなってたのか・・・ 0032デフォルトの名無しさん2020/03/29(日) 02:26:21.63ID:p3fh4h77>>30 ImplBaseにどんな役割を持たせたいかによるんじゃない? ImplAとImplBがそれぞれIfを継承するのでは何が不満なのかをハッキリしないと何を解決すればいいのかわからない 0033デフォルトの名無しさん2020/03/29(日) 08:26:45.65ID:zFUy7lJg>>29 え、持病でもあったの? 0034デフォルトの名無しさん2020/03/29(日) 09:05:51.82ID:GFdzppn9 中二で死ぬって早すぎないか 0035デフォルトの名無しさん2020/03/29(日) 10:02:27.83ID:+/sFre8I>>23 NaNが「不定」を意味するなら、理論的には > // false > bool c = NaN == NaN ; > bool d = NaN != NaN ; が正しいんだろう 仕様は上のようになってて、実装依存ということはないか? 0036デフォルトの名無しさん2020/03/29(日) 10:26:02.28ID:zyhHBMyS NaNとの!=以外の比較演算は常にfalse、!=は常にtrue ってするのが普通みたいだけど 0037デフォルトの名無しさん2020/03/29(日) 10:36:40.12ID:oQB7eLYm そもそも非数に「等しい」なんて場合があるのか? 数学的におかしくね? 0038デフォルトの名無しさん2020/03/29(日) 10:49:11.16ID:+/sFre8I 本来は「非数」なら「等しくない」も議論できない気がするのでなんとも 0/0->NaNなら「不定」と解釈してもおかしくないし、その場合、 NaN!=NaNは「ほとんどの場合に正しい」としか言えない 0039デフォルトの名無しさん2020/03/29(日) 11:12:19.09ID:CNNBvMSR !=は==の否定だから、NaN == NaNはfalseなので NaN != NaN -> !(NaN == NaN) はtrue ほかの等値比較の意味論に合わせてるんだと 0040デフォルトの名無しさん2020/03/29(日) 11:22:58.32ID:sawiSEmu>>35 std::numeric_limits<T>::is_iec559 (IEEE 754) の場合は NaN!=NaN に定まる模様。 https://stackoverflow.com/questions/38798791/nan-comparison-rule-in-c-c > I read the IEEE-754 rules on NaN, which states: >> The comparisons EQ, GT, GE, LT, and LE, when either or both operands is NaN returns FALSE. >> The comparison NE, when either or both operands is NaN returns TRUE.
C++の規定はこう。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf [expr.eq] (C++14でも同じ https://timsong-cpp.github.io/cppwp/n4140/expr.eq#5 ) > If two operands compare equal, the result is true for the == operator > and false for the != operator. If two operands compare unequal, > the result is false for the == operator and true for the != operator. > Otherwise, the result of each of the operators is unspecified. これだけなら「equalでもunequalでもない」として結果を不定とする実装もあり得る。
ただしCの規定には以下のものがある。 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2454.pdf Equality operators > The == (equal to) and != (not equal to) operators are ... > For any pair of operands, exactly one of the relations is true. これによれば NaN==NaN, NaN!=NaN を両方 false とするCの実装は許されない。 わざわざこれに反するようなC++の実装が作られる理由は無さそうだし、受け入れられることも無さそう。 0041デフォルトの名無しさん2020/03/29(日) 13:05:33.90ID:0VKwdtls ieee754の書き方が難しすぎて何処をどう読めばNaN!=NaNになるのか分からん… 0042デフォルトの名無しさん2020/03/29(日) 13:28:15.35ID:oQB7eLYm 現実は>>39なんだろうけど 原理主義的にはNaNの比較は例外を投げるべき 0043デフォルトの名無しさん2020/03/29(日) 13:57:09.44ID:vg0TAzW0 NaNを無限と言い換えて数学的な議論をするしかない 0044デフォルトの名無しさん2020/03/29(日) 15:32:11.50ID:nDbo81n4 みんな大好き超準解析、 0045デフォルトの名無しさん2020/03/29(日) 15:32:36.22ID:CNNBvMSR 実際こんなのもある https://cpprefjp.github.io/reference/compare/strong_order.html0046デフォルトの名無しさん2020/03/29(日) 16:10:11.53ID:p3fh4h77 江添が悪い たぶんx==xが常に真になるとは限らない(xがNaNの場合)って話を間違えて覚えてたんだろ 0047◆QZaw55cn4c 2020/03/29(日) 16:13:08.71ID:GnieE+99>>28 私は江添氏の本を買って読んでおり、個人的に非常に参考になる、どちらかといえば良書の部類だと考えておりますので 「被害者を減らす」という発想はありえないのです 0048はちみつ餃子 ◆8X2XSCHEME 2020/03/29(日) 16:39:47.96ID:tSgWoZoj>>47 総合的な判断がどうあれそこが間違ってるなら間違ってるだろ。 0049デフォルトの名無しさん2020/03/29(日) 17:54:48.32ID:oQB7eLYm 江添氏はブログを立てて不特定多数の一般人からの指摘を待っている 誤りの指摘はそこでやれ、それが「被害者を減らす」ことにつながる