voidOnStart ()
{
//--- выведем DBL_MAX с помощью Print(), это равносильно PrintFormat(%%.16G,DBL_MAX)Print ( "---- как выглядит DBL_MAX -----" );
Print ( "Print(DBL_MAX)=" , DBL_MAX );
//--- теперь выведем число DBL_MAX с помощью PrintFormat()PrintFormat ( "PrintFormat(%%.16G,DBL_MAX)=%.16G" , DBL_MAX );
//--- Вывод в журнал "Эксперты"// Print(DBL_MAX)=1.797693134862316e+308// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308//--- посмотрим как выводится тип floatfloat c=( float ) M_PI ; // нужно явно приводить к целевому типуPrint ( "c=" ,c, " Pi=" , M_PI , " (float)M_PI=" ,( float ) M_PI );
// c=3.14159 Pi=3.141592653589793 (float)M_PI=3.14159//--- покажем, что может произойти при арифметических операциях над вещественными типамиdouble a= 7 ,b= 200 ;
Print ( "---- перед арифметическими операциями" );
Print ( "a=" ,a, " b=" ,b);
Print ( "Print(DoubleToString(b,16))=" , DoubleToString (b, 16 ));
//--- разделим a на b (7/200)
a=a/b;
//--- теперь как будто восстановим значение в переменной b
b= 7.0 /a; // ожидается, что b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - но это не так//--- выведем вновь вычисленное значение bPrint ( "----- после арифметических операций" );
Print ( "Print(b)=" ,b);
Print ( "Print(DoubleToString(b,16))=" , DoubleToString (b, 16 ));
//--- вывод в журнал "Эксперты"// Print(b)=200.0// Print(DoubleToString(b,16))=199.99999999999997 16 (видим, что на самом деле b уже не равно 200.0) //--- создадим очень маленькое значение epsilon=1E-013double epsilon= 1 e- 13 ;
Print ( "---- создадим очень маленькое число" );
Print ( "epsilon=" ,epsilon); // получим epsilon=1E-013//--- теперь вычтем эпсилон из числа b и выведем снова значение в журнал "Эксперты"
b=b-epsilon;
//--- выводим двумя способамиPrint ( "---- после вычитания epsilon из переменной b" );
Print ( "Print(b)=" ,b);
Print ( "Print(DoubleToString(b,16))=" , DoubleToString (b, 16 ));
//--- вывод в журнал "Эксперты"// Print(b)=199.9999999999999 (теперь значение b после вычитания эпсилон не может округлиться до 200)// Print(DoubleToString(b,16))=199.99999999999985 78// (теперь значение b после вычитания эпсилон не может округлиться до 200)
}
이 문제를 다루었으므로 추가 숫자가 어디에서 왔는지 설명할 수 있습니까? 해당 숫자는 빨간색으로 표시됩니다.
IEEE 754의 경우 유효 자릿수는 소수점 이하가 아니라 합계 17을 초과할 수 없다고 생각했습니다.
arithmetic formats: sets of binary and decimal floating-point data, which consist of finite numbers (including signed zeros and subnormal numbers), infinities, and special "not a number" values (NaNs) interchange formats: encodings (bit strings) that may be used to exchange floating-point data in an efficient and compact form rounding rules...
DoubleToString에 있습니까? :) 다시 말하지만, 아무 척하지 않고 핸드북은 말 그대로 다음과 같이 말합니다.
"숫자의 값이 0과 16 사이이면 지정된 소수점 이하 자릿수를 가진 숫자의 문자열 표현이 얻어집니다. 숫자의 값이 -1과 -16 사이이면 숫자의 문자열 표현 과학적 형식은 지정된 소수점 이하 자릿수로 얻어집니다. 다른 모든 경우 number, 숫자의 문자열 값에는 소수점 이하 8자리 "가 포함됩니다 .
귀하의 값은 30입니다. 핸드북의 설명에 따르면 이 경우 숫자의 문자열 값은 일반적으로 소수점 이하 8 자리를 포함해야 합니다.
프로필로 이동하여 서비스 데스크를 선택하십시오.
. . . Print 기능에 대한 보다 완전한 새 예제가 도움말에 추가되었습니다.
이 문제를 다루었으므로 추가 숫자가 어디에서 왔는지 설명할 수 있습니까? 해당 숫자는 빨간색으로 표시됩니다.
IEEE 754의 경우 유효 자릿수는 소수점 이하가 아니라 합계 17을 초과할 수 없다고 생각했습니다.
IEEE 754의 경우 유효 자릿수는 소수점 이하가 아니라 합계 17을 초과할 수 없다고 생각했습니다.
솔직히 말해서, 그것은 나를 귀찮게 한 적이 없습니다. 그러나 관심이 있는 경우 다음과 같은 몇 가지 링크가 있습니다.
이러한 질문에 대한 답이 있을 것이라고 보장하지는 않지만 흥미롭게 읽을 수 있습니다.
솔직히 말해서, 그것은 나를 귀찮게 한 적이 없습니다.
DoubleToString 함수 에 문제가 있는 것 같습니다.
테스트(EURUSD,D1) 666666.66666666662 78616
불필요한 유효 숫자를 제공합니다. 그들은 안된다.
DoubleToString 함수 에 문제가 있는 것 같습니다.
테스트(EURUSD,D1) 666666.66666666662 78616
불필요한 유효 숫자를 제공합니다. 그들은 안된다.
DoubleToString에 있습니까? :) 다시 말하지만, 아무 척하지 않고 핸드북은 말 그대로 다음과 같이 말합니다.
"숫자의 값이 0과 16 사이이면 지정된 소수점 이하 자릿수를 가진 숫자의 문자열 표현이 얻어집니다. 숫자의 값이 -1과 -16 사이이면 숫자의 문자열 표현 과학적 형식은 지정된 소수점 이하 자릿수로 얻어집니다. 다른 모든 경우 number, 숫자의 문자열 값에는 소수점 이하 8자리 "가 포함됩니다 .
귀하의 값은 30입니다. 핸드북의 설명에 따르면 이 경우 숫자의 문자열 값은 일반적으로 소수점 이하 8 자리를 포함해야 합니다.
DoubleToString에 있습니까? :) 다시 말하지만, 아무 척하지 않고 핸드북은 말 그대로 다음과 같이 말합니다.
귀하의 값은 30입니다. 핸드북의 설명으로 판단하면 이 경우 숫자의 문자열 값은 일반적으로 소수점 이하 8 자리를 포함해야 합니다.
설명서에는 이 자리에도 빼기 기호가 있어요 :)
여기에서 복사했습니다: https://www.mql5.com/ru/docs/convert/doubletostring
"다른 모든 경우에 숫자의 문자열 값은 소수점 이하 8자리를 포함합니다"라고 강조한 문구에는 빼기 기호가 포함되어 있지 않은 것 같습니다./
그리고 문장에서 밑줄 친 단어는 불필요합니다. :)
내 질문이 사라졌습니다
https://www.mql5.com/ru/forum/1111/page721#comment_179003
주문은 여전히 유효합니다.