나는 mysql 데이터베이스로 부동 소수점 숫자를 전달하기 위해 Perl을 사용하고 있습니다. 펄에서 곱셈을 수행합니다 :Perl/mysql 부동 소수점 정확도가
$var = 0.001 * 3;
이 값을 DOUBLE 유형의 열에있는 mysql 데이터베이스에 저장합니다. 나중에 결과를 검색 할 수에 더 곱셈과 추가를 수행하고 데이터베이스에 저장된 결과는 0.0045해야 데이터베이스
$previous_result_from_db += 0.001*1 + 0.001*0.5.
에 다시 저장, 대신 내가 얻을 : 0.0045000000000000005. 나는 부정확의 원천이 어디인지 이해하려고 노력하고 있습니다. Perl이나 데이터베이스입니까? 이러한 종류의 부동 소수점 상호 작용을 처리하여 부정확성을 피하는 올바른 방법은 무엇입니까?
감사합니다.
표준 응답 : [모든 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야 할 사항] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). 그것은 펄이나 데이터베이스가 아닙니다. 부동 소수점 연산입니다. – Miller
"부정확을 피하기 위해 이러한 종류의 부동 소수점 상호 작용을 처리하는 올바른 방법은 무엇입니까?" - 이전에 대한 부식적인 반응 : 고정 소수점을 사용하십시오. – BRFennPocock
@Miller, 덜 밀도있는 설명이 있습니다. http://floating-point-gui.de/ –