0
가 10^3
로 구성된 2 차원 그래프를 그릴 필요가 (실질적으로 5*10^6
까지 도달 할 수) 포인트문제
샘플 포인트 :
이x, and f(x)
따라서, 플롯에 매우 비 편안 범위에 알 수 있듯이
x y = f(x)
-----------------------------------------
0.0000000000000e+000 9.9453146383711e+006
1.0107375000000e-002 1.0053545400632e+007
2.0211374000000e-002 9.9475746573179e+006
3.0315250000000e-002 1.0051184341654e+007
4.0418752000000e-002 9.9500284997072e+006
5.0525375000000e-002 1.0048588691478e+007
6.0629874000000e-002 9.9527328766918e+006
7.0733748000000e-002 1.0045819834233e+007
8.0837503000000e-002 9.9556071710602e+006
...
,
나는 다른한 범위 [a, b]
에서 변환하는 기능을 썼다 특정 크기 (w=780
및 h=550
)와 사각형 영역에서 전체 그래프를 플롯하기 위해 7,273,210은
// mapping x from [a, b] to [c, d]
qreal Graph::mapTo(qreal x, qreal a, qreal b, qreal c, qreal d)
{
qreal denom = b - a;
if (denom != 0.0f)
{
return (x - a)*(d - c)/denom + c;
}
return 0.0f;
}
//...
qreal x1 = mapTo(points[i].x(), 0, maxX, 0, w);
qreal y1 = mapTo(points[i].y(), minY, maxY, 0, h);
qreal x2 = mapTo(points[i+1].x(), 0, maxX, 0, w);
qreal y2 = mapTo(points[i+1].y(), minY, maxY, 0, h);
그러나이 변환 큰 정확성 후
은 ... 잃어버린 나는 직선 결과 값의이 종류를 가지고 .. 음모를 꾸미고 후 (대신 곡선의) 수평 라인x = 0 y = 549.453
x = 0.762673 y = 549.447
x = 1.52509 y = 549.453
x = 2.2875 y = 549.447
x = 3.04988 y = 549.453
x = 3.8125 y = 549.447
x = 4.57496 y = 549.453
x = 5.33736 y = 549.447
x = 6.09976 y = 549.452
y
값이 너무 많이 정확도 ISN을 잃은 것 같은 몇 가지 실수가 컴퓨터에 floating point
를 arithmetics로 표현하지만,이 경우에 보인다되지 않을 수 있다는 사실을 알고 ' 그것?
무엇이 그 값의 원인입니까?
이 경우 수학 연산 간의 정확성을 위해 어떤 알고리즘을 사용해야합니까?
는'qreal' 무엇입니까? 'denom! = 0.0f' - 분모가 0에 가까우면 여전히 문제가 있습니다. – PaulMcKenzie
@PaulMcKenzie'qreal'은'double '에 대한 typedef 인'Qt' 출신입니다 – ampawd
@PaulMcKenzie 님이 당신의 문제에 대해 이야기합니까? – ampawd