我尝试将8字节字符放入等式中导致很多错误,我应该做的是确保等式可以取静态值并产生8字节的输出。
#include <math.h>
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
void voltage_measure(void);
void main(void) {
voltage_measure();
}
void voltage_measure(void) {
char Van1[8],VA;
char Vbn[8],VB;
char Vcn[8],VC;
char AC[4],ac;
char BC[4],bc;
char AB[4],ab;
double Vab1,Vab2,Vbc1,Vbc2,Vac1,Vac2;
double Vab[8],Vbc[8],Vac[8];
Van1[0]=0xF0;
Van1[1]=0x00;
Van1[2]=0x00;
Van1[3]=0x00;
VA=0x000000F0;
Vbn[0]=0x78;
Vbn[1]=0x00;
Vbn[2]=0x00;
Vbn[3]=0x00;
VB=0x78;
Vcn[0]=0x3C;
Vcn[1]=0x00;
Vcn[2]=0x00;
Vcn[3]=0x00;
VC=0x3C;
AB[0]=0xB4;
AB[1]=0x00;
ab=0xB4;
AC[0]=0x2D;
AC[1]=0x00;
ac=0x2D;
BC[0]=0x5A;
BC[1]=0x00;
bc=0x5A;
Vab1=(VB*sin(ab))*(VB*sin(ab)) ;
Vab2=(VA+(VB*cos(ab)))*(VA+(VB*cos(ab)));
Vab[4]=sqrt(Vab1+Vab2);
Vbc1=(VC*sin(bc))*(VC*sin(bc));
Vbc2=(VB+(VC*cos(bc)))*(VB+(VC*cos(bc))) ;
Vbc[4]=sqrt(Vbc1+Vbc2);
Vac1=(VC*sin(ac))*(VC*sin(ac));
Vac2=(VA+(VC*cos(ac)))*(VA+(VC*cos(ac)));
Vac[4]=sqrt(Vac1+Vac2);
}
答案 0 :(得分:1)
这是我已经理解的,
char
变量中(可能是为了节省空间?)VA=0x000000F0;
(1字节)变量char
static value
可能是常量VA
等double
精度sin
和sqrt
类型的功能时,它们将在double
无论如何工作main
功能; math.h
这样的东西
和编译命令上的数学库也许你可以详细说明你面临的问题了吗?
评论更新1.
当你说“8字节数组的字符”时 - 你是否试图用8 double
数组创建char
?
从评论2更新。
如果您的答案位于double
,则可以在double
变量中找到答案
double
已经是8字节(在大多数平台上)
是否有特殊原因将其置于char
数组或字节数组中?
评论3更新
链接错误意味着您确实包含了一个用于链接的数学库
标题只是为编译提供了函数原型
使用gcc
,命令行上将为-lm
。
评论4更新
要将double
转换为整数值,请检查此页面,
How can I convert a floating-point value to an integer in C?
答案 1 :(得分:0)
您计算机上的普通char
是否有问题,因此0xF0等数字被视为-16而不是+240?您是否知道在某些机器上,这将会发生什么?
答案 2 :(得分:0)
关于您在评论中提到的链接错误:包括math.h是不够的,您还必须告诉链接器添加库。尝试在命令行中添加“-lm”。