70 lines
1.7 KiB
C
70 lines
1.7 KiB
C
#ifndef _BGC_DUAL_NUMBER_H_
|
|
#define _BGC_DUAL_NUMBER_H_
|
|
|
|
// =================== Types ==================== //
|
|
|
|
typedef struct {
|
|
float real, dual;
|
|
} BGC_FP32_DualNumber;
|
|
|
|
typedef struct {
|
|
double real, dual;
|
|
} BGC_FP64_DualNumber;
|
|
|
|
// =================== Reset ==================== //
|
|
|
|
inline void bgc_fp32_dual_number_reset(BGC_FP32_DualNumber* number)
|
|
{
|
|
number->real = 0.0f;
|
|
number->dual = 0.0f;
|
|
}
|
|
|
|
inline void bgc_fp64_dual_number_reset(BGC_FP64_DualNumber* number)
|
|
{
|
|
number->real = 0.0;
|
|
number->dual = 0.0;
|
|
}
|
|
|
|
// ==================== Make ==================== //
|
|
|
|
inline void bgc_fp32_dual_number_make(BGC_FP32_DualNumber* number, const float real, const float dual)
|
|
{
|
|
number->real = real;
|
|
number->dual = dual;
|
|
}
|
|
|
|
inline void bgc_fp64_dual_number_make(BGC_FP64_DualNumber* number, const double real, const double dual)
|
|
{
|
|
number->real = real;
|
|
number->dual = dual;
|
|
}
|
|
|
|
// ==================== Copy ==================== //
|
|
|
|
inline void bgc_fp32_dual_number_copy(BGC_FP32_DualNumber* destination, const BGC_FP32_DualNumber* source)
|
|
{
|
|
destination->real = source->real;
|
|
destination->dual = source->dual;
|
|
}
|
|
|
|
inline void bgc_fp64_dual_number_copy(BGC_FP64_DualNumber* destination, const BGC_FP64_DualNumber* source)
|
|
{
|
|
destination->real = source->real;
|
|
destination->dual = source->dual;
|
|
}
|
|
|
|
// ==================== Swap ==================== //
|
|
|
|
inline void bgc_fp32_dual_number_swap(BGC_FP32_DualNumber* first, BGC_FP32_DualNumber* second)
|
|
{
|
|
first->real = second->real;
|
|
first->dual = second->dual;
|
|
}
|
|
|
|
inline void bgc_fp64_dual_number_swap(BGC_FP64_DualNumber* first, BGC_FP64_DualNumber* second)
|
|
{
|
|
first->real = second->real;
|
|
first->dual = second->dual;
|
|
}
|
|
|
|
#endif
|