ライブラリ: Price_Compare - ページ 2

 
fxsaber:

もちろんできる!しかし、それはどれほど醜いだろうか?

マクロのないTypeToBytesライブラリでは、それは恐ろしいだけでなく、便利でもないだろう。つまり、ライブラリは単に捨てられてしまうかもしれない。

言語の習熟度の問題だと思う。私がOOPを知らなかった/理解していなかったときは、OOPを使っていなかった。すべてが変わった。

習熟度と何の関係があるのでしょうか?私たちは使い方の話をしているのであって、これはコードのデバッグのことで、マクロでは難しいのですが...。
 
coderex:
習熟度と何の関係があるのだろう。私たちは使い方について話しているのであって、これはコードのデバッグのことであり、マクロではより難しいことなのだが...。

マクロは、デバッグが必要ないところ、つまりクリーンなコードで使われる。

コンパイラーは常に、マクロのないクリーンなコードを受け取る。もしこのクリーンなコードを取得(ファイルに保存)できれば、それを見ることができる。

開発者はそれを行うことができるが、実行する可能性は低い(C++の-Eスイッチ)。

 
fxsaber:

マクロは、デバッグが必要ない、つまりクリーンなコードで使われる。

コンパイラーはマクロのないクリーンなコードを常に受け取る。このクリーンなコードを取得(ファイルに保存)できれば、それを見ることができる。

開発者はそれを行うことができるが、それを行う可能性は低い(C++の-Eキー)。

あなたは本当に私を理解していないのでしょうか、それとも開発者とコミュニケーションするときにいつもするように頑固に自分の本当の視点を守っているのでしょうか?上に書いたように、私はこの分野で私たちよりはるかに進んでいるプログラマーの意見に従うと書いたし、2つの問題を具体的に書いた。1つはコードを読むことの不便さに関連する小さな問題、もう1つはコードをデバッグする際の深刻な問題だ。もし本当に理解できないなら、マクロが使われているコードをデバッガで調べてみるといい......。

これで、この不要なジャリバーは終わりである。

 
coderex:

それとも、開発者とコミュニケーションするときにいつもするように、頑固に自分の本当の視点を守っているのだろうか?上記で、私はこの分野で私たちよりはるかに進んでいるプログラマーの意見に従うと書きました。また、私は2つの問題を具体的に書きました。1つはコードを読むことの不便さに関する小さな問題、もう1つはコードをデバッグする際の深刻な問題です。もしあなたが本当に理解していないのなら、マクロが使われているコードをデバッガで調べてみてください...。

私はあなたの意見を十分に尊重するし、論拠も明確だ。残念ながら、metaeditor.exeには-Eスイッチがない。そして、完全な利便性で読んでデバッグできるクリーンなコードを作成することができた。

つまらないものを書いているうちに、私は非常にくだらないコードを作ってしまう。まずは動くようにすることが大事だと気づく(そして、開発者自身のバグはこの段階でキャッチされる)。アーキテクチャー的にどうアプローチするのが良いかは、必ずしも明らかではない。作業開始時にはほとんど気づかない点もあり、深刻な再設計もある。デバッグの後、曲がったコードをより論理的なものに構築する作業がある。新しい関数やマクロを作成することもある。目標は、すべてを論理的にし、ロジックやコードの繰り返しをなくすことだ。コードは美しく、簡潔で論理的なものになる。

デバッグが本当に難しいのはテンプレートだ。テンプレートは厄介なプリプロセッサだ。そしてデバッグが非常に難しい。例えば、スーパーテンプレートのTypeToBytesを書くとき、デバッグはほとんど不可能だった。曲がったコードを書いて、それをとかすこともできなかった。頭の中ですべてを整理し、何がどこで起こっているのかをよく理解する必要があった。理解するための自己診断のようなものだ。

だからこそ、テンプレートやプリプロセッサーがまったくなくてはならない状況があるのだ。そして、純粋なコードを支持する人たちは、おそらくこのような状況を想像していなかっただろう。

 
Automated-Trading:

価格_比較

著者:fxsaber

面白いですね。

#define EPSILON (1.0 e-7 + 1.0 e-13)
なぜEPSILONがこの値として定義されているのですか?


 
Alain Verleyen:

なぜEPSILONはこの値で定義されているのですか?

覚えていません

"EPSILON "はなぜこの値で定義されているのですか?

Альтернативные реализации стандартных функций/подходов

fxsaber, 2016.09.02 10:58

double MyNormalizeDouble( const double Value, const uint digits )
{
  static const double Points[] = {1.0 e-0, 1.0 e-1, 1.0 e-2, 1.0 e-3, 1.0 e-4, 1.0 e-5, 1.0 e-6, 1.0 e-7, 1.0 e-8};
  const double point = digits > 8 ? 1.0 e-8 : Points[digits];
  const long Integer = (long)Value; // イプシロン・コミュニケーションズ

  return((long)((Value > 0) ? (Value - Integer) / point + HALF_PLUS : (Value - Integer) / point - HALF_PLUS) * point + Integer);
}
 

取引、自動取引システム、取引戦略のテストに関するフォーラム

標準機能/アプローチの代替実装

fxsaber, 2016.09.02 10:58 AM.

常に正しく動作するようになったが、オリジナルより10%だけ高速化した
double MyNormalizeDouble( const double Value, const uint digits )
{
  static const double Points[] = {1.0 e-0, 1.0 e-1, 1.0 e-2, 1.0 e-3, 1.0 e-4, 1.0 e-5, 1.0 e-6, 1.0 e-7, 1.0 e-8};
  const double point = digits > 8 ? 1.0 e-8 : Points[digits];
  const long Integer = (long)Value; // 極端に遅い相対イプシロンを作らないようにする。

  return((long)((Value > 0) ? (Value - Integer) / point + HALF_PLUS : (Value - Integer) / point - HALF_PLUS) * point + Integer);
}
#define  HALF_PLUS (0.5 + 1.0 e-7)
 

プリプロセッサ・マクロはなぜ悪なのか?

Why are preprocessor macros evil and what are the alternatives?
Why are preprocessor macros evil and what are the alternatives?
  • stackoverflow.com
I have always asked this but I have never received a really good answer; I think that almost any programmer before even writing the first "Hello World" had encountered a phrase like "macro should never be used", "macro are evil" and so on, my question is: why? With the new C++11 is there a real alternative after so many years? The easy...
 
Alain Verleyen:

プリプロセッサ・マクロはなぜ悪なのか?

悪いのはマクロではなく、その無教養な使い方なのだ。

削除済み  
fxsaber:

悪はマクロではなく、その非識字的な使用である。

マクロは誤用から保護されていない。

クラスもテンプレートも定数もなかった時代にマクロは登場した。

今では、その使用は意味をなさない。