Val2가 맞습니다. long으로 캐스팅한 후 Val3이 올바르지 않습니다. 분명히 부동 소수점 숫자의 이중 표현의 일부 기능입니다. EPSILON을 늘릴 필요가 있습니다. 졸린 머리가 생각나지 않는다. 아는 사람이 끼어들 수도 있습니다.
개발자가 이 글을 쓴 이유 를 이해해야 합니다.
//+------------------------------------------------------------------+//| Сравнивает два значения типа double. |//| RESULT |//| Возвращает истину, если значения равны и |//| ложь в противном случе. |//+------------------------------------------------------------------+bool CEnvironment::DoubleEquals( constdouble a, constdouble b)
{
//---return ( fabs (a-b)<= 16 * DBL_EPSILON * fmax ( fabs (a), fabs (b)));
//---
}
DBL_EPSILON은 숫자 1.0에 적용할 때 1(1!) 유효 지수 비트의 차이를 정의합니다. 실제로 이러한 차이는 발생하지 않습니다. 숫자가 완전히 같거나 둘 이상의 유효 비트만큼 다를 수 있습니다. 따라서 4개의 최하위 비트(또는 사용 가능한 약 16개 중 약 1.5개의 마지막 유효 십진수)의 차이를 무시하려면 16*DBL_EPSILON 과 같은 값을 취해야 합니다.
물론 숫자의 범위가 어느 정도 알려져 있고 예측 가능한 경우가 있습니다. 0...1000이라고 합시다. 이 경우 대략적인 동등성을 비교하기 위해 1000*16*DBL_EPSILON과 같은 상수를 사용할 수 있습니다. 그러나 그러한 비교는 실제로 부동 소수점의 전체 아이디어를 고정 소수점으로 바꿉니다(이유 추측).
#import ex5는 최적화의 악이라는 것이 밝혀졌습니다.
글로벌 최적화 가능성의 관점에서 - 그렇습니다.
우리는 코드를 더 작게 만들지 않고 상당히 공격적인 인라인을 했습니다. 따라서 글로벌 최적화 모드에서는 매우 좋은 코드를 생성합니다.
이것은 결과 속도를 최전선에 두는 컴파일 타임에 볼 수 있습니다.
fxsaber
코드에 오류가 있습니다.
감사합니다. 수정했습니다.
여전히 오류입니다
마지막에 5가 되어야 합니다.
여전히 오류입니다
이것은 오류가 아니라 반올림입니다. 이것이 바로 표준 버전이 하는 일입니다.
여기 당신을 위한 코드가 있습니다, 그것을 테스트하십시오
여기 당신을 위한 코드가 있습니다, 그것을 테스트하십시오
Val2가 맞습니다. long으로 캐스팅한 후 Val3이 올바르지 않습니다. 분명히 부동 소수점 숫자의 이중 표현의 일부 기능입니다. EPSILON을 늘릴 필요가 있습니다. 졸린 머리가 생각나지 않는다. 아는 사람이 끼어들 수도 있습니다.
개발자가 이 글을 쓴 이유 를 이해해야 합니다.
개가 이곳에 묻힌 것 같습니다.
개가 이곳에 묻힌 것 같습니다.
RSDN 포럼에서 다리 성장
물론 숫자의 범위가 어느 정도 알려져 있고 예측 가능한 경우가 있습니다. 0...1000이라고 합시다. 이 경우 대략적인 동등성을 비교하기 위해 1000*16*DBL_EPSILON과 같은 상수를 사용할 수 있습니다. 그러나 그러한 비교는 실제로 부동 소수점의 전체 아이디어를 고정 소수점으로 바꿉니다(이유 추측).
CopyTicks의 변형으로 원본보다 몇 배 더 빠른 경우도 있습니다(> 0부터).