MQL4およびMQL5でDigits()をバイパスして任意の数値(引用符だけでなく)の小数点以下桁数を取得 - ページ 11

 
multiplicator:
浮き輪なんて○○だ。この浮き輪はトラブルしかない。

いつになったら、番組用の普通の数字を作るんだろう?

分数を整数部と分数 部としてメモリに記憶させることができます。

floatはdoubleより精度(,の後の桁)が低いので簡単です。

は、プログラミングでは普通の数字なのでしょうか?))), どうやら10進数が欲しいようですが、残念なことに、開発者は新しい型はないと明言しています(管理者Renatの投稿を検索してください)。

double to fraction, here didhttps://www.mql5.com/ru/forum/290279#comment_9396706

が、演算子のオーバーロードにはまだ+, -, *, /が必要なので、興味はないです。

Число в дробь (convert double to fraction)
Число в дробь (convert double to fraction)
  • 2018.11.16
  • www.mql5.com
Ищу способ преобразовать вещественное число в дробь, нагуглил исходник https://stackoverflow...
 
Igor Makanu:

floatはdoubleより精度(,の後の桁)が低いので簡単です。

は、プログラミングでは普通の数字なのでしょうか?))), どうやら10進数が欲しいようですが、残念なことに、開発者は新しい型はないと明言しています(管理者Renatの投稿を検索してください)。

double into fraction, here didhttps://www.mql5.com/ru/forum/290279#comment_9396706

が、まだオーバーロードするための演算子 +, -, *, / が必要で、今のところ面白みがない。

はい、DECIMALです。



また、独自の型を開発することもできます。この場合、数値は整数部と小数部としてメモリに保存されます。
2つの整数の ようなものです。



2 147 483 647.2 147 483 647



となり、2つの整数と同じだけのメモリを消費してしまいます。8バイトです。

 
multiplicator:

はい、DECIMALです。



また、独自の型を開発することもできます。この場合、数値は整数部と小数部としてメモリに保存されます。
2つの整数の ようなものです。



2 147 483 647.2 147 483 647



しかも、2つの整数と同じだけのメモリを消費してしまう。8バイトです。

すでに標準的なダブル・ダブルの演算があります。

https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format

Quadruple-precision floating-point format - Wikipedia
Quadruple-precision floating-point format - Wikipedia
  • en.wikipedia.org
This 128-bit quadruple precision is designed not only for applications requiring results in higher than double precision,[1] but also, as a primary function, to allow the computation of double precision results more reliably and accurately by minimising overflow and round-off errors in intermediate calculations and scratch variables. William...
 
Taras Slobodyanik:

すでに標準的なダブル・ダブルの演算があります。

https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format

逆に、二重から脱却したいのに、二重を勧めてくるんですね。

デーブルは、不正確な形で数字をメモリに保存します。
動画をあげました
 
multiplicator:
私は逆にダブリーから逃れたいのに、ダブリーダブリーを勧めてくるんですね。

ダブリは、不正確な形で数字をメモリに保存します。
動画をあげました

まあ、計算速度や互換性を重視しないのであれば、そうですね、好きなようにカウントすればいいのでしょう。
しかし、この数字をどこかで使う必要が出てくるとすぐに、すべてをデーブルに戻し、不正確な数字に変換しなければならなくなる。

 
Taras Slobodyanik:

まあ、スピードや互換性が重要でないなら、そう、好きなようにカウントすればいい。
しかし、この数字をどこかで使う必要が出てきた途端に、すべてを二重の不正確な数字に変換し直さなければならないのです。

まあ、10進数なら大丈夫でしょう。 何とか割り算して、正確な形で保存されています。

 
multiplicator:

まあ、10進数ならいいのですが、なぜか割り算して厳密な形で保存されているのです。

まあ、10進数でなく、分数で。

10進数では、同じ不正確な略語を受け入れなければなりません。なぜなら、無限に正確な数を書くことは不可能(不必要)だからです。

 
multiplicator:

まあ、10進数ならいいんですけどね。どういうわけか、お互いに分割してきっちり保存しているんです。

対数の数え方、整数でない数字での度数換算、三角法の使い方、...どうするんでしょうね。サードパーティライブラリ、インジケータを使用する。全部間違いだ!
 
Aliaksandr Hryshyn:
対数の数え方、非整数での累乗、三角法の使い方、・・・。サードパーティライブラリ、インジケータを使用する。どれもエラーになりやすい!
2進数ではなく、10進数の扱いに慣れているんですね。
と、誤差の範囲に慣れているのでしょう。
 

https://www.mql5.com/ru/forum/287618/page3#comment_9240442

これはおそらく最良の解決策ですが、40%速くなります(なぜかmqlはループで遅くなる)。

int d2(double x){
  if(x==NormalizeDouble(x,6))
   {
    if(x==NormalizeDouble(x,5))
     {    
      if(x==NormalizeDouble(x,4))
       {
        if(x==NormalizeDouble(x,3))
         {
          if(x==NormalizeDouble(x,2))
           {
            if(x==NormalizeDouble(x,1))
             {
              if(x==NormalizeDouble(x,0))
               {
                return 0;
               }
              return 1;
             }
            return 2;
           }
          return 3;
         }
        return 4;
       }
      return 5;
     }
    return 6;
   }
  return 7;
}
Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5
Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5
  • 2018.11.03
  • www.mql5.com
Думаю не у одного меня была редкая ситуация когда нужно было получить количество десятичных знаков после запятой, а функция Digits() работает тольк...