정규화이중 역설 - 페이지 2

 
transcendreamer :
패턴 갭은 정규화 후에도 꼬리가 남아 있다는 것입니다!
정상화 후 꼬리가 없습니다 ... 사람들을 오도하지 마십시오.
 
VOLDEMAR :
정상화 후 꼬리가 없습니다 ... 사람들을 오도하지 마십시오.

나는 입력하지 않습니다 ....하지만 나는

상황은 다음과 같습니다. 나는 이중 숫자를 정규화하고 터미널의 전역 변수에 쓴 다음 읽고, 다시 정규화하고 꼬리를 얻습니다!

결국 - 난 이런 농담을 잡을 힘이 없어 - 난 그냥 DoubleToStr(current,2) 를 사용하여 그것을 잡아서 강제로 끊었다

 
transcendreamer :

나는 입력하지 않습니다 ....하지만 나는

상황은 다음과 같습니다. 나는 이중 숫자를 정규화하고 터미널의 전역 변수에 쓴 다음 읽고, 다시 정규화하고 꼬리를 얻습니다!

결국 - 난 이런 농담을 잡을 힘이 없어 - 난 그냥 DoubleToStr(current,2) 를 사용하여 그것을 잡아서 강제로 끊었다

예를 들어 이중 변수를 5자로 정규화한 경우 변수는 5자를 저장합니다. 재인쇄 및 기타 경우에는 변수를 다른 데이터 유형으로 전송하여 결과적으로 꼬리가 나타날 수 있습니다. .

그러나 정규화 후 이중에 꼬리가 없습니다 ...

잼을 얻지 않으려면 적용 장소에서 정규화를 수행해야하며 계산 과정에서 할 수 없습니다 ...

 
VOLDEMAR :

예를 들어 이중 변수를 5자로 정규화한 경우 변수는 5자를 저장합니다. 재인쇄 및 기타 경우에는 변수를 다른 데이터 유형으로 전송하여 결과적으로 꼬리가 나타날 수 있습니다. .

그러나 정규화 후 이중에 꼬리가 없습니다 ...

잼을 얻지 않으려면 적용 장소에서 정규화를 수행해야하며 계산 과정에서 할 수 없습니다 ...

즉, 예를 들어 변환을 수행하면
(string)current

그렇다면 이 변환 과정에서 꼬리를 줄 수 있습니까?

몰랐다

감사하다!

 
transcendreamer :
즉, 예를 들어 변환을 수행하면
(string)current

그렇다면 이 변환 과정에서 꼬리를 줄 수 있습니까?

몰랐다

감사하다!

예, 아마도 DoubleToString (, 5)이 맞을 것입니다.
 
stringo :

NormalizeDouble은 정확히 이와 같이 작동합니다(그리고 최초의 MQL 이후로 항상 이와 같이 작동했습니다).

숫자에 10을 자릿수의 거듭제곱으로 곱하고 정수 형식으로 변환( 소수 부분 제외)한 다음 10으로 자릿수의 거듭제곱으로 나눕니다.

문제는 무엇입니까? 템플릿 중단?

소수 부분을 버리는 것입니까? 반올림이 완료됩니다.

NormalizeDouble(1.25,1) = 1.3

 
Integer :

소수 부분을 버리는 것입니까? 반올림이 완료됩니다.

NormalizeDouble(1.25,1) = 1.3

네. 반올림을 언급하는 것을 잊었습니다. 정수를 얻을 때 반올림이 적용됩니다.
 
transcendreamer :
즉, 예를 들어 변환을 수행하면
(string)current

그렇다면 이 변환 과정에서 꼬리를 줄 수 있습니까?

몰랐다

감사하다!

확실히 그런 방식은 아닙니다. 2진법 != 10진법. 이진 소수 자릿수 값: 0.5 / 0.25 / 0.125 / 0.0625 / 0.03125 등 이 벽돌에서 모든 십진수를 더하는 것은 불가능합니다. 예를 들어, 십진수 0.3을 정확하게 표현하는 것은 불가능합니다(대략적인 값만 추가할 수 있음). 이진법에서는 조금 더 적거나 더 많을 것입니다. 그래서 이 꼬리가 나타납니다.

나머지 없이 1/2 ^ 임의의 거듭제곱으로 나눌 수 있는 숫자만 정확히 표시됩니다.

즉, 십진수를 이진 형식으로 나타내려고 할 때 숫자를 왜곡합니다.

 
이러한 비유:
우리는 연산의 결과를 정확히 기록하지 않으려면 1/3을 반올림해야 한다는 사실에 익숙합니다. 그러나 삼항 시스템에는 연산 == 0.1의 정확한 표현이 있습니다. 우리가 삼항을 기본으로 하고 PC가 10진수로 작업했다면 0.1 트로이치가 삼항 시스템으로 다시 변환될 때 숫자의 쓰레기에 놀랄 것입니다.
 
pavlick_ :
이러한 비유:
우리는 연산의 결과를 정확히 기록하지 않으려면 1/3을 반올림해야 한다는 사실에 익숙합니다. 그러나 삼항 시스템에는 연산 == 0.1의 정확한 표현이 있습니다. 우리가 삼항을 기본으로 하고 PC가 10진수로 작업했다면 0.1 트로이치가 삼항 시스템으로 다시 변환될 때 숫자의 쓰레기에 놀랄 것입니다.

다 그래

그러나 어떤 이유로 페니 계산기조차도 메모리에서 숫자를 읽을 때 거기에 쓰여진 내용을 정확히 알려줄 수 있습니다.

분수 1.23을 기록하고 꼬리 없이 정확히 1.23을 얻었습니다.

그리고 여기에 몇 가지 농담이 있습니다.

이론적으로 사용자는 이진 형식으로 숫자를 나타내는 것과 같은 루틴에서 벗어나야 합니다.

<너드 모드 끄기>