【发布时间】:2022-01-13 14:56:59
【问题描述】:
我创建了 3 个 void 函数,它们会将给定 pow(int、float 或 double)的结果返回到原点。
#include <assert.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
enum base_type { BASE_TYPE_INT, BASE_TYPE_FLOAT, BASE_TYPE_DOUBLE };
void my_pow_int(int *b, int n) {
int a = *b;
*b = pow(a,n);
}
void my_pow_float(float *b, int n) {
float a = *b;
*b = powf(a,n);
}
void my_pow_double(double *b, int n) {
double a = *b;
*b = pow(a,n);
}
接下来我创建了一个接受 3 个参数的函数,然后决定应该执行上面的哪个函数。
void my_pow(void *b, int n, enum base_type type) {
if (type == BASE_TYPE_INT){
*b = my_pow_int(b, n);
}
if (type == BASE_TYPE_FLOAT){
*b = my_pow_float(b, n);
}
else{
*b = my_pow_double(b, n);
}
}
我现在确实有一个问题,当我给他一个 void 指针时,由于强制转换,它不会编译。我不明白我在这里做错了什么。
【问题讨论】:
-
旁白:在
my_pow_int()中,*b = pow(a,n);只能在pow()较弱或int比double更精确时给出近似正确的答案。仅使用 integer 解决方案会更好。