如何增加matlab精度,我如何使matlab的精度与c++相同?
我有精度问题。我必须让我的c ++代码具有与matlab相同的精度。在matlab中,我有脚本,它用数字等做一些东西。我用c ++获得了与该脚本相同的代码。输出相同的输入是不同的:(我发现,在我的脚本,当我尝试104> = 104它返回false。我试图使用格式很长,但它并没有帮助我找出为什么它的错误。 double我认为也许matlab存储的地方真正的价值104和真正的103.9999 .
我有精度问题。我必须让我的c ++代码具有与matlab相同的精度。在matlab中,我有脚本,它用数字等做一些东西。我用c ++获得了与该脚本相同的代码。输出相同的输入是不同的:(我发现,在我的脚本,当我尝试104> = 104它返回false。我试图使用格式很长,但它并没有帮助我找出为什么它的错误。 double我认为也许matlab存储的地方真正的价值104和真正的103.9999 ...所以我在c ++中提高了我的精度,它也没有帮助,因为当matlab在c ++中返回值为50.000时,我得到了值50.050的高精度,这两个值来自少数计算,比如+或*。有什么办法可以让我的c ++和matlab脚本具有相同的精度?
for i = 1:neighbors
y = spoints(i,1)+origy;
x = spoints(i,2)+origx;
% Calculate floors, ceils and rounds for the x and y.
fy = floor(y); cy = ceil(y); ry = round(y);
fx = floor(x); cx = ceil(x); rx = round(x);
% Check if interpolation is needed.
if (abs(x - rx) < 1e-6) && (abs(y - ry) < 1e-6)
% Interpolation is not needed, use original datatypes
N = image(ry:ry+dy,rx:rx+dx);
D = N >= C;
else
% Interpolation needed, use double type images
ty = y - fy;
tx = x - fx;
% Calculate the interpolation weights.
w1 = (1 - tx) * (1 - ty);
w2 = tx * (1 - ty);
w3 = (1 - tx) * ty ;
w4 = tx * ty ;
%Compute interpolated pixel values
N = w1*d_image(fy:fy+dy,fx:fx+dx) + w2*d_image(fy:fy+dy,cx:cx+dx) + ...
w3*d_image(cy:cy+dy,fx:fx+dx) + w4*d_image(cy:cy+dy,cx:cx+dx);
D = N >= d_C;
end我在第12行遇到了其他问题。tx和ty eqauls 0.707106781186547或1 - 0.707106781186547。来自d_image的值在范围0和255之间.N是从图像内插4个像素的值0..255。 d_C是值0.255。仍然不知道为什么matlab显示,当我有N个vlaues,如:x x x 140.0000 140.0000和d_C:x x x 140 x。 D在第四位给我0,所以140.0000!= 140.我调试它试图更精确,但它仍然说它的140.00000000000000,它仍然不是140。
int Codes::Interpolation( Point_ point, Point_ center , Mat *mat)
{
int x = center.x-point.x;
int y = center.y-point.y;
Point_ my;
if(x<0)
{
if(y<0)
{
my.x=center.x+LEN;
my.y=center.y+LEN;
}
else
{
my.x=center.x+LEN;
my.y=center.y-LEN;
}
}
else
{
if(y<0)
{
my.x=center.x-LEN;
my.y=center.y+LEN;
}
else
{
my.x=center.x-LEN;
my.y=center.y-LEN;
}
}
int a=my.x;
int b=my.y;
double tx = my.x - a;
double ty = my.y - b;
double wage[4];
wage[0] = (1 - tx) * (1 - ty);
wage[1] = tx * (1 - ty);
wage[2] = (1 - tx) * ty ;
wage[3] = tx * ty ;
int values[4];
//wpisanie do tablicy 4 pixeli ktore wchodza do interpolacji
for(int i=0;i<4;i++)
{
int val = mat->at(Point_(a+help[i].x,a+help[i].y));
values[i]=val;
}
double moze = (wage[0]) * (values[0]) + (wage[1]) * (values[1]) + (wage[2]) * (values[2]) + (wage[3]) * (values[3]);
return moze;
}LEN = 0.707106781186547数组值中的值与matlab值100%相同。
更多推荐
所有评论(0)