오류, 버그, 질문 - 페이지 2939

 
x572intraday :
모든 가격은 소수점 다섯 번째 자리까지 정확하게 표시되며 어떤 이유로 같은 목록에 있는 하나가 다음과 같이 표시하기로 결정했습니다. 도대체 왜? 그것은 실수입니까 아니면 결론을 하나의 관점으로 빗겨야합니까? 예를 들어, PrintFormat이나 fprint로 이를 닦을 것이라고 가정해 보겠습니다. 그러나 원칙적으로 이것은 숫자를 잘못 표현한 것이 아닙니까?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

니콜라이 셈코 , 2020.01.05 21:41

이 질문은 항상 나옵니다.
누구나 IEEE 754 표준에 대해 끊임없이 이야기하지만 사람들이 Wikipedia에 가면 복잡성이나 게으름 때문에 이 표준의 의미를 이해하지 못한 채 떠나는 경우가 많습니다.

이 포스트를 나중에 참고할 수 있도록 이 표준을 가능한 한 짧고 간단한 용어로 설명하는 시간을 갖도록 하겠습니다.


그래서 더블 타입 8바이트 = 64비트로 구성됩니다. ( 뜨다 4바이트 = 32비트)

그리고   이중 숫자 표현 그리고 뜨다 기호( 기호 ), 지수 및 가수 의 3가지 구성요소로 구성됩니다.  


더블:


뜨다:

당연히 이 형식에는 숫자의 10진수 표현이 없고 2진수만 있습니다.

  • 부호는 1비트입니다. 0이면 +(더하기), 1이면 -(빼기)를 의미합니다.
  • 지수는 숫자 2의 거듭제곱을 저장합니다. float의 경우 -126 10 ~ 127 10 범위일 수 있고 double의 경우 -1022 10 ~ 1023 10일 수 있습니다.
  • 가수 - 이진 형식의 숫자 자체의 소수 부분으로, 이 첫 번째 단위와 쉼표를 고려하지 않고 쉼표가 첫 번째 단위 뒤에 오는 형식으로 축소


숫자의 이진 표현과 소수와의 관계에 대한 약간의 이해:

2 4 = 10000 2 = 16 10

2 3 = 1000 2 = 8 10

2 2 = 100 2 = 4

2 1 = 10 2 = 2

2 0 = 1 2 = 1 10

2 -1 = 0.1 2 =(1/2) 10 = 0.5 10          

2 -2 = 0.01 2 = (1/4) 10 = 0.25 10

2 -3 = 0.001 2 = (1/8) 10 =   0.125 10

2 -4 = 0.0001 2 = (1/16) 10 =   0.0625 10

2 -5 = 0.00001 2 = (1/32) 10 =   0.03125 10

2 -6 = 0.000001 2 = (1/64) 10 = 0.015625 10

2 -7 = 0.0000001 2 = (1/128) 10 = 0.0078125 10

2 -8 = 0.00000001 2 = (1/256) 10 =   0.00390625 10

2 -9 = 0.000000001 2 = (1/512) 10 =   0.001953125 10

2 - 10 = 0.0000000001 2 = (1/1024) 10 =   0.0009765625 10

2 - 11 = 0.00000000001 2 = (1/2048) 10 =   0.00048828125 10

2 - 12 = 0.000000000001 2 = (1/4096) 10 =   0.000244140625 10

2 - 13 = 0.0000000000001 2 = (1/8192) 10 =   0.0001220703125 10

 

double 유형에 대한 예를 고려하십시오 .

예 #1

십진수가 있습니다: 891677.4025191

이 숫자는 이진 형식으로 나타낼 수 있습니다.

11011001101100011101.01100111000010110111101111000101000001111101110001110
(누가 그것을 확인하고 싶어)

주어진 숫자의 가수를 선택하려면 쉼표를 19비트 왼쪽(이 경우)으로 이동하여 첫 번째 단위 뒤에 오도록 합니다.

1. 1011001101100011101011001110000101101111101111000101 000001111101110001110

그러나 우리는 52비트의 가수만 가지고 있습니다. 그래서 우리는 처음 52개의 중요한 비트를 취합니다.

가수 = 1011001101100011101011001110000101101111101111000101

지수 = (19+1023) 10 = 10000010010 2   1023 10 (01111111111 2 )을 더하면 01111111111 2 는 0이고 더 크면 양수이고 더 작으면 음수입니다. 저것들. 지수 값을 다시 얻으려면 11비트 지수 값에서 1023을 빼야 합니다.

전체적으로 891677.4025191 이중 유형에서 다음과 같이 표시됩니다 .

0    10000010010    1011001101100011101011001110000101101111101111000101

하지만 그때부터 이것은 이진 표현이므로 정확히 십진수로 변환합니다.

891677.4025190 99996425211429595947265625가 됩니다.


예 #2

십진수가 있습니다: -0.00000145258556224114

이 숫자는 이진 형식으로 나타낼 수 있습니다.

-0.0000000000000000000110000101111011001101011011101001101010100111001110

첫 번째 단위 뒤에 오도록 쉼표 20자리를 오른쪽으로 이동하여 주어진 숫자의 가수를 선택합니다.

1. 1000010111101100111010110111010011010101001111001110 * 2 -20

가수 = 1000010111101100111010110111010011010101001111001110

지수 = (-20+1023) 10 = 0 1111101011 2

빼기 기호는 첫 번째 비트가 1임을 의미합니다.

전체적으로 -0.00000145258556224114 라는 숫자는 이중 유형에서 다음과 같이 표시됩니다.

1 0 1111101011 1000010111101100111010110111010011010101001111001110

십진수로 변환해 보겠습니다.

그것은 -0.00000145258556224113 991124017968015191826225418481044471263885498046875가 될 것입니다



귀하의 경우 문제는 숫자 0.01에서 발생합니다. 왜냐하면 이중 유형에서는 다음과 같이 표시됩니다.

0 01111111000 0100011110101110000101000111101011100001010001111011

십진수로 변환하면 0.0100000000000000020816681711721685132943093776702880859375 10 과 같습니다.

프레젠테이션과 함께

3 10 = 1.5*2 = 1.1 2 *2 1

5 10 = 2.5*2 = 10.1 2 *2 1

6 10 = 1.5*4 = 1.1 2 *2 2

7 10 = 3.5*2 = 11.1 2 *2 1

괜찮아요.

왜 double 0.01이 실제로 0.01보다 큽니까?

그 이유는 다음과 같습니다.

0 01,111,111,000 010001111010111000001101011110101110111011011101110110111011011011011101101101101110111011668171172168171721685132943093776702880859375 오류 = 0.000 000 000 000 000 208166817 ...

0 01,111,111,000 01000111101011101101010001110101111011101011110110110111010110101111010101000111101 0 - 0.0099999999999998473443341140409756911404097569175064563751220703125 오류 = - 0.000 000 000 000 001 52655666 ...

이 공정 화학을 이해하기 위해 다음 계산기를 사용할 수 있습니다.
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html

https://baseconvert.com/ieee-754-floating-point


https://baseconvert.com/ieee-754-floating-point


 

감사합니다. 교육적입니다. 글쎄요, 원칙적으로 이 MQ는 빗질을 하지 않았어야 했는데 특별히 사용자의 판단에 맡겼나요?

 

흠. 어드바이저의 매개변수를 저장하는 주제에 대한 기능 또는 기타 추가 기능(라이브러리, 코드)이 있습니까?

작업은 어드바이저를 실행할 때 기호(추가 기능은 여전히 기간의 분석임)를 실행할 때 설정 파일 세트를 저장하는 코드를 초기화하는 것입니다.

예를 들어 - Advisor-symbol-period의 이름.

다시 쓰기 가능한 파일 - 최신 문자 설정만 필요합니다.

예를 들어, 기본적으로 테스터는 마지막 실행에 대한 설정을 저장합니다.

 
좋은 오후에요. 문제는 원격 컴퓨터에 있고 MQL5 웹 사이트에 연결할 수 없어 구매한 지표 를 다운로드할 수 없습니다. 아무나 만날 수 있나요
 
Slava Botalov :
좋은 오후에요. 문제는 원격 컴퓨터에 있고 MQL5 웹 사이트에 연결할 수 없어 구매한 지표 를 다운로드할 수 없습니다. 아무나 만날 수 있나요


Zomro의 원격 컴퓨터?

 
x572intraday :

감사합니다. 교육적입니다. 글쎄요, 원칙적으로 이 MQ는 빗질을 하지 않았어야 했는데 특별히 사용자의 판단에 맡겼나요?

그래서 그들은 이해하지 못했습니다.
오류가 없습니다.
모든 것이 원래대로입니다.
 
Vladislav Andruschenko :


Zomro의 원격 컴퓨터?

 
Slava Botalov :
좋은 오후에요. 문제는 원격 컴퓨터에 있고 MQL5 웹 사이트에 연결할 수 없어 구매한 지표 를 다운로드할 수 없습니다. 아무나 만날 수 있나요
블라디슬라프 안드루셴코 :


Zomro의 원격 컴퓨터?

슬라바 보탈로프 :


이 공급자는 심각한 위반으로 차단되었습니다.  

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

www.mql4.com에 대한 액세스가 폐쇄된 이유는 무엇입니까?

레나트 파트훌린 , 2020.11.17 12:16

***

서브넷이 있는 전체 Zomro 공급자는 서브넷의 대규모 사기 행위에 대해 차단됩니다.

***
 
Nikolai Semko :
그래서 그들은 이해하지 못했습니다.
오류가 없습니다.
모든 것이 원래대로입니다.

그것에 관한 것이 아닙니다. 문제는 특히 프로그래머가 아니라 거래자에게 어디에서 유용할 수 있습니까? 나는 터미널에서 가격 척도 또는 주문 창에서 그러한 숫자를 보지 못했습니다. 모든 것이 모든 곳에서 단일 형태로 가져옵니다 (어딘가는 5 자리 , 다른 곳은 같은 곳).

 
Vladimir Karputov :


이 공급자는 심각한 위반으로 차단되었습니다.

나쁜, 다른 것으로 전환해야합니다. 어떤 제안?