Time for an 2014 update…
This commit is contained in:
parent
372c577f83
commit
09687c4926
2520 changed files with 34227 additions and 7318 deletions
|
|
@ -1,52 +1,75 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
struct imprecise {
|
||||
typedef struct{
|
||||
double value;
|
||||
double delta;
|
||||
};
|
||||
}imprecise;
|
||||
|
||||
#define SQR(x) ((x) * (x))
|
||||
struct imprecise imprecise_add(struct imprecise a, struct imprecise b)
|
||||
imprecise imprecise_add(imprecise a, imprecise b)
|
||||
{
|
||||
struct imprecise ret;
|
||||
imprecise ret;
|
||||
ret.value = a.value + b.value;
|
||||
ret.delta = sqrt(SQR(a.delta) + SQR(b.delta));
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct imprecise imprecise_mul(struct imprecise a, struct imprecise b)
|
||||
imprecise imprecise_mul(imprecise a, imprecise b)
|
||||
{
|
||||
struct imprecise ret;
|
||||
imprecise ret;
|
||||
ret.value = a.value * b.value;
|
||||
ret.delta = sqrt(SQR(a.value * b.delta) + SQR(b.value * a.delta));
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct imprecise imprecise_div(struct imprecise a, struct imprecise b)
|
||||
imprecise imprecise_div(imprecise a, imprecise b)
|
||||
{
|
||||
struct imprecise ret;
|
||||
imprecise ret;
|
||||
ret.value = a.value / b.value;
|
||||
ret.delta = sqrt(SQR(a.value * b.delta) + SQR(b.value * a.delta)) / SQR(b.value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct imprecise imprecise_pow(struct imprecise a, double c)
|
||||
imprecise imprecise_pow(imprecise a, double c)
|
||||
{
|
||||
struct imprecise ret;
|
||||
imprecise ret;
|
||||
ret.value = pow(a.value, c);
|
||||
ret.delta = fabs(ret.value * c * a.delta / a.value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
char* printImprecise(imprecise val)
|
||||
{
|
||||
char principal[30],error[30],*string,sign[2];
|
||||
sign[0] = 241; /* ASCII code for ±, technical notation for denoting errors */
|
||||
sign[1] = 00;
|
||||
|
||||
sprintf(principal,"%f",val.value);
|
||||
sprintf(error,"%f",val.delta);
|
||||
|
||||
string = (char*)malloc((strlen(principal)+1+strlen(error)+1)*sizeof(char));
|
||||
|
||||
strcpy(string,principal);
|
||||
strcat(string,sign);
|
||||
strcat(string,error);
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
struct imprecise x1 = {100, 1.1};
|
||||
struct imprecise y1 = {50, 1.2};
|
||||
struct imprecise x2 = {-200, 2.2};
|
||||
struct imprecise y2 = {-100, 2.3};
|
||||
struct imprecise d;
|
||||
imprecise x1 = {100, 1.1};
|
||||
imprecise y1 = {50, 1.2};
|
||||
imprecise x2 = {-200, 2.2};
|
||||
imprecise y2 = {-100, 2.3};
|
||||
imprecise d;
|
||||
|
||||
d = imprecise_pow(imprecise_add(imprecise_pow(imprecise_add(x1, x2), 2),imprecise_pow(imprecise_add(y1, y2), 2)), 0.5);
|
||||
printf("d = %f \\pm %f\n", d.value, d.delta);
|
||||
printf("Distance, d, between the following points :");
|
||||
printf("\n( x1, y1) = ( %s, %s)",printImprecise(x1),printImprecise(y1));
|
||||
printf("\n( x2, y2) = ( %s, %s)",printImprecise(x2),printImprecise(y2));
|
||||
printf("\nis d = %s", printImprecise(d));
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,4 +91,4 @@
|
|||
(pack
|
||||
(round (car N) 10)
|
||||
" ± "
|
||||
(round (sqrt (* 1.0 (cdr N))) 8) ) ) )
|
||||
(round (sqrt (cdr N) 1.0) 8) ) ) )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue