-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreal.c
60 lines (49 loc) · 1.56 KB
/
real.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "field_info.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void real_sum(const void* v1,const void* v2, void* res){
double val;
val = (*((double*) v1) + *((double*) v2));
memcpy(res, &val, sizeof(double));
}
void real_mult(const void* v1,const void* v2, void* res){
double val;
val = (*((double*) v1) * *((double*) v2));
memcpy(res, &val, sizeof(double));
}
void real_print(const void* el){
printf("%.3lf", *((const double*) el));
}
void read_real_array(const size_t v,const size_t h, void* elems){
double *arr;
arr = (double*)elems;
printf("type your matrix:\n");
for (size_t i = 0; i < v;i++){
for (size_t j = 0;j < h;j ++){
scanf("%lf", (arr + i*h + j));
//printf(" %lf\n", *(arr + i*h + j));
}
}
}
void real_set_zero(void* ptr){
*(double*)ptr = 0.0;
}
void real_get_number(void* ptr){
scanf("%lf", (double*)ptr);
}
static FieldInfo* REAL_FIELD_INFO= NULL;
FieldInfo* get_info_real(){
if (REAL_FIELD_INFO==NULL){
REAL_FIELD_INFO = (FieldInfo*) malloc(sizeof(FieldInfo));///
REAL_FIELD_INFO->type = "real";
REAL_FIELD_INFO->el_size = sizeof(double);
REAL_FIELD_INFO->sum_el = real_sum;
REAL_FIELD_INFO->mult_el = real_mult;
REAL_FIELD_INFO->print_el = real_print;
REAL_FIELD_INFO->read_array = read_real_array;
REAL_FIELD_INFO->set_zero = real_set_zero;
REAL_FIELD_INFO->get_number = real_get_number;
}
return REAL_FIELD_INFO;
}