Skip to content
Snippets Groups Projects
Commit 7dc34631 authored by Boris Stefanovic's avatar Boris Stefanovic
Browse files

FIX: makefile compilation

parent 294dad27
Branches
No related tags found
No related merge requests found
......@@ -7,7 +7,7 @@ HDR := $(wildcard ${SRC_DIR}/*.h)
BUILD_DIR := ${BUILD_ROOT}/prod
TARGET := ${BUILD_DIR}/main
CFLAGS := -std=c11 -Wall -Wextra -pedantic
LDEXTRA :=
LDEXTRA := -lm
LDFLAGS := ${CFLAGS} ${LDEXTRA}
OBJ := $(patsubst ${SRC_DIR}/%.c,${BUILD_DIR}/%.o,${SRC})
......@@ -27,13 +27,13 @@ all: ${TARGET} ${TARGET_DEBUG}
${TARGET}: ${OBJ}
${CC} ${LDFLAGS} -o $@ $^
${OBJ}: ${BUILD_DIR}/%.o: %.c ${HDR} ${BUILD_DIR}
${OBJ}: ${BUILD_DIR}/%.o: ${SRC_DIR}/%.c ${HDR} ${BUILD_DIR}
${CC} ${CFLAGS} -c -o $@ $<
${DEBUG_TARGET}: ${DEBUG_OBJ}
${CC} ${DEBUG_LDFLAGS} -o $@ $^
${DEBUG_OBJ}: ${DEBUG_BUILD_DIR}/%.o: %.c ${HDR} ${DEBUG_BUILD_DIR}
${DEBUG_OBJ}: ${DEBUG_BUILD_DIR}/%.o: ${SRC_DIR}/%.c ${HDR} ${DEBUG_BUILD_DIR}
${CC} ${DEBUG_CFLAGS} -c -o $@ $<
......
//
// by Boris Stefanovic on 24/05/22
//
#ifndef PROG_KMEANS_COMMON_H
#define PROG_KMEANS_COMMON_H
#include <stdint.h>
typedef int64_t int_t;
typedef double fp_t;
#endif //PROG_KMEANS_COMMON_H
//
// by Boris Stefanovic on 24/05/22
//
#include "distance.h"
#include <math.h>
#include "common.h"
#define ERROR -1.0
double distance_euclid_int(const vector_int_t* p1, const vector_int_t* p2) {
if (p1->dim != p2->dim)return ERROR;
int_t acc = 0;
for (size_t i = 0; i < p1->dim; ++i) {
int_t diff = p2->data[i] - p1->data[i];
int_t item = diff * diff;
acc += item;
}
return sqrt((double) acc);
}
inline int_t
abs_diff(const int_t a1, const int_t a2) {
int_t diff = a2 - a1;
return diff >= 0 ? diff : -diff;
}
double distance_manhattan_int(const vector_int_t* p1, const vector_int_t* p2) {
if (p1->dim != p2->dim)return ERROR;
int_t acc = 0;
for (size_t i = 0; i < p1->dim; ++i) {
int_t diff = p2->data[i] - p1->data[i];
int_t item = diff >= 0 ? diff : -diff;
acc += item;
}
return (double) acc;
}
double distance_chebyshev_int(const vector_int_t* p1, const vector_int_t* p2) {
return ERROR;
}
//
// by Boris Stefanovic on 24/05/22
//
#ifndef PROG_KMEANS_DISTANCE_H
#define PROG_KMEANS_DISTANCE_H
#include "vector.h"
/*
* Although many distance return types may be left as integers,
* when passing function pointers to the k-means routine,
* a fixed signature will be expected.
* Therefore, we convert all distance return types to double.
*/
double distance_euclid_int(const vector_int_t* p1, const vector_int_t* p2);
double distance_manhattan_int(const vector_int_t* p1, const vector_int_t* p2);
double distance_chebyshev_int(const vector_int_t* p1, const vector_int_t* p2);
#endif //PROG_KMEANS_DISTANCE_H
//
// Created by Boris Stefanovic on 24/05/22.
//
#include "vector.h"
#include "vector.h"
#include <stdlib.h>
vector_int_t* vector_int_create(const size_t dim, const int* data) {
vector_int_t* vector_int_create(const size_t dim, const int_t* data) {
vector_int_t* v;
if ((v = malloc(dim * sizeof(int))) == NULL) return NULL;
v->dim = dim;
for (int i = 0; i < dim; ++i) v->data[i] = data[i];
for (size_t i = 0; i < dim; ++i) v->data[i] = data[i];
return v;
}
......@@ -4,15 +4,22 @@
#ifndef PROG_KMEANS_VECTOR_H
#define PROG_KMEANS_VECTOR_H
/*
* We can justify the implementation of vectors for multiple types to ease
* application to several scenarios without the need for casting,
* e.g. scientific measurements (floating point) and image data (integer).
*/
#include <stdlib.h>
#include "common.h"
typedef struct _vector_int {
typedef struct vector_int_t_ {
size_t dim;
int* data;
int_t* data;
} vector_int_t;
vector_int_t* vector_int_create(const size_t dim, const int* data);
vector_int_t* vector_int_create(const size_t dim, const int_t* data);
#endif //PROG_KMEANS_VECTOR_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment