2012-09-27 4 views
0

가능한 중복 : 가장 가까운 부동 소수점 값을 계산


How to convert floats to human-readable fractions?

내가 부동 소수점 값이 0.595781 말을 한 나는 그 용도 몫를 사용하여 가능한 한에 가까운 좀하고 싶습니다 0 to 1023 (10-bits) 범위에서 제한되는 정수 분자 및 분모 값만.

직관적 인 방법

는 (적어도 시작하는) 0.555 상당히 가까운 일치 (오류가 0.040781입니다)를 제공 595/1000을 사용하는 것이 작업을 수행 할 수 있습니다.

그러나 더 일치하는 597/10020.595808 (오류는 0.0000273입니다)입니다. 더 나은 경기도있을 수 있습니다. 나는 원래의 값에 가까운 분자 값과 분모 값을 쓸데없는 방식으로 사용하여 두 번째 몫으로왔다.

그런 다음 분자 및 분모 정수 값을 직접 가져 오는 모든 기준이 주어진 방법이 있는지 궁금합니다.

보레이트 발생기를 Infineon XE167G device으로 설정하는 데 궁금한 두 개의 정수 값이 필요한 경우.

모든 아이디어를 얻을 수 있습니다. 감사

+1

단순한 반올림으로 인해 596/1000에 가까워지면 왜 595/1000은 직관적일까요? – TJD

+1

분모의 경우 d = 1024 인 경우 [최상의 합리적인 근사값] (https://en.wikipedia.org/wiki/Continued_fraction#Best_rational_approximations)이 필요합니다. 이것은 Borgleader에 의해 링크 된 복제물에서 응답됩니다. –

+0

최상의 정밀도를 얻으려면 사용 가능한 가장 높은 악마 화 장치 (0에서 1023까지의 값은 512 임)를 사용합니다 (2의 제곱입니다). 그런 다음 첫 번째 분자는 원형 (512 * 값)입니다. 이것은 부동 소수점 값이 2 진이므로 항상 1/512보다 작은 정밀도를 보장합니다. 더 나은 정밀도를 위해 분모를 수정하려면 분모에 추가되는 보정 항 = (분자/값) - 신 경점을 계산하십시오. –

답변

0

당신이 16-bit 정수를 사용하는 경우, 당신은 단지 numerator = 59578을 가질 수와 분모는 예를 5를 들어, 10의 역률을 유지. 그래서 대답은 59578/(10^5)입니다.

이 방법을 사용하면 최소한 4 개의 정밀도를 유지해야합니다. 그냥 생각 ...

+0

감사합니다. 문제는 분자와 분모가 최대 값을 1023 (10 비트)로 가질 수 있기 때문에 문제가 나타나는 것보다 더 어렵게 만듭니다. 분자와 분모의 직접 계산을위한 알고리즘이나 아마도 시행 착오를하는 중개 방법을 찾는 경우입니다. 감사합니다. – user1704021