1. 반올림 방법 반올림은 매우 널리 사용되는 대략적인 계산 방법으로, 두 가지 유형의 산술 반올림 방법과 뱅커 반올림 방법을 포함합니다. 소위 산술 반올림 방법은 평범한 의미의 반올림 방법입니다. 규칙은 : 버려진 비트의 값이 5보다 크거나 같을 때, 비트가 철회되는 반면, 포기 된 비트의 값이 5 미만인 경우 비트가 직접 철회됩니다. 소위 뱅커 반올림 방법은 본질적으로 4 개의 반올림 6을 5로 반올림하고 더블을 두 배로 유지하는 방법입니다 (6 개로 5 개 이상의 홀수 및 짝수로 알려져 있음). 규칙은 : 버려진 비트의 값이 5보다 작을 때, 비트의 값이 6보다 크거나 같을 때 비트가 전면으로 반환되는 동안 비트가 직접 버려집니다. 왼쪽 비트의 값이 5 일 때 포기되면 이전 숫자의 값이 홀수 인 경우 비트가 떨어지는 동안 비트가 떨어지면 비트가 삭제됩니다. 곧장. 요약하면, 두 개의 반올림 방법에 의해 얻은 결과는 일관되지 않으므로 사용할 때 실제 요구에 따라 구별되어야합니다. 그렇지 않으면 일부 설명 할 수없는 편차가 발생합니다. 2. 델파이의 반올림 함수는 델파이에 반올림 함수가있다. 그러나 은행가 반올림 방법의 규칙에 따라 반올림 작업을 구현합니다. 델파이에서 반올림 함수를 사용하는 것은 항상 라운드를 사용하고 있지만 때로는이를 사용하여 얻은 답변이 우리가 예상 한 것과 다르다는 것을 알았습니다. 예 : i : = 라운드 (11.5) 결과 : i = 12i : = 라운드 (10.5) 결과 : i = 10 예, 우리의 기대에 따라 두 번째 함수는 11을 반환해야하지만 왜 이런 일이 일어나고 있습니까? XXX.5의 경우 정수 부분은 홀수 인 다음 반올림이 반올림됩니다. Delphi 버그입니까? << pascal >>에 대한 문장을 보자. 이 프로세서는 소위 뱅커 반올림 방법을 사용합니다. 5.5 라운드와 같은 10 진수 지점은 6이며 6.5 라운드의 결과는 6이기도합니다. 6은 짝수이기 때문입니다. Round Function은 실제로 Banker 알고리즘을 운영에 사용하며 일반적 으로이 알고리즘을 사용하는 데 통계적으로 사용됩니다. 그러나 기존의 반올림 방법보다 더 과학적이지만 어떻게 해결할 수 있습니까? 누군가가 10.5에 매우 작은 값을 추가 한 다음 정확도에 영향을 미치지 않으면 서 둥근 기능을 호출했지만 항상 증상을 치료하는 방법입니다. 근본 원인. 더 이상 정통 해결책이 없습니까? 인터넷에서 다른 기능이 발견되었습니다 : 값 : 확장된다. int64; = DEFAULT8087CW (RoundUpcw); CPU에서 FPU (Floating Point Unit) 컨트롤러 컨트롤 워드의 값은 FPU 정확도, 반올림 모드 및 작업 오류가 발생할 때 예외가 발생하는지 여부입니다. 위의 프로그램의 아이디어는 매우 간단합니다. 이는 8087cw를 먼저 저장 한 다음 반올림하도록 설정하여 숫자가 반올림하지 않을 때 8087cw를 복원합니다. 실제로, SETT8087CW의 구현이 시스템 단위로 제공 되었기 때문에, 프로그램은 Doround (value : Extended)를 단순화 할 수 있습니다 Oldcw : = Default8087cw; 하나의 해결책. 실제로, Borland는 우리가 그러한 문제를 겪을 것이라고 오랫동안 생각했으며 FPU의 반올림 모드를 사용자 정의해야한다고 생각했기 때문에 우리가 사용할 수있는 기성품 기능을 제공했습니다. 수학 단위에는 setRoundMode 함수가 있습니다. 아래는 캡슐화 된 반올림 기능입니다 setRoundmode (rm); 끝; 예 : i : = Roundex (11.5) 결과 : i = 12i : = Roundex (10.5) 결과 : I = 11, 다른 Roundmodes 모직으로 설정하면 어떻게 될까요? 옷감? 예 : i : = RoundEx (11.5, rmtruncate) 결과 : i = 11i : = RoundEx (10.5, rmtruncate) 결과 : i = 10RoundEx 기능은 Trunc 기능으로 화려하지 않습니까?