#define sqrt(x) (x*x)与#define sqrt(x) x*x 的区别

C语言 宏定义一大堆, 刚学都会迷糊

#define sqrt(x) (x*x)与#define sqrt(x)  x*x 的区别,

前者为正确定义,后者将不能计算出正确的平方

#include <stdio.h>
#define sqrt(x)  x*x

void main(void)
{
   int x=3;
  
   printf("%d", 10/sqrt(3)/sqrt(3));

 

}

此例将输出结果为: 9

因为10/sqrt(3)/sqrt(3)); 将相当于 10/3*3/3*3 = 9

如果将#define sqrt(x) x*x 改成 #define sqrt(x) (x*x)

这时10/sqrt(3)/sqrt(3)); 将相当于 10/(3*3)/(3*3) = 0, 一定要注意宏义时括号的用法.

 

 

#ifndef YGY0_H #ifndef _CRT_SECURE_NO_WARNINGS #endif #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <math.h> #include <ctype.h> #include <limits.h> #define EPS 1e-9 //浮点比较 #define MOD 998244353 //取模运算 #define MAX_LL 1000010//大型数组 #define MAX_L 1010 //小型数组 #define MAX_N 11 //矩阵阶数 #define PI 3.141592653//通用常数 #define EU 2.718281828//通用常数 #define in int #define ll long long #define db double #define ch char #define vd void #define uin unsigned int #define ull unsigned long long #define uch unsigned char #define br break #define cn continue #define rt return #define sc scanf #define pr printf //支持单元输入 #define scin(x) sc("%d", &(x)) #define scll(x) sc("%lld", &(x)) #define scdb(x) sc("%lf", &(x)) //支持空白略去 #define scch(x) sc(" %c", &(x)) #define scst(x) sc(" %s", (x)) //支持二元输入 #define scin2(x,y) sc("%d%d", &(x), &(y)) #define scll2(x,y) sc("%lld%lld", &(x), &(y)) #define scdb2(x,y) sc("%lf%lf", &(x), &(y)) //支持一元输出 #define prin(x) pr("%d", x) #define prll(x) pr("%lld", x) #define prdb(x) pr("%lf", x) #define prch(x) pr("%c", x) #define prst(x) pr("%s", x) //支持一元换行输出 #define prinn(x) pr("%d\n", x) #define prlln(x) pr("%lld\n", x) #define prdbn(x) pr("%lf\n", x) #define prchn(x) pr("%c\n", x) #define prstn(x) pr("%s\n", x) //支持一元精度输出 #define prdbr(x, r) pr("%.*lf", (r), (x)) //支持一元精度换行输出 #define prdbrn(x, r) pr("%.*lf\n", (r), (x)) //支持换行输出 #define prn pr("\n") //支持空格输出 #define prb pr(" ") //支持整型最值判断 #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) //支持浮点相等判断 #define CEPS(a, b) (fabs((a) - (b)) < EPS)应该没问题
最新发布
12-14
/************************************** Copyright 2009, Chint Power System Ltd. Co. File Name: Invcontroller.c Description: This file gives definition and implementation of Inverter control function Version : V1.0 Author: Zhou xu Date:2011-11-17 **************************************/ /**** head-files including****/ #include "Funheader.h" /**** macro definition****/ #define cFreq60Hz 15360 #define cFreq50Hz 12800 //macro constant for Clarke and Park converter #define cDivide3 5461 //Q14 #define cSqrt3 28378 //Q14 #define cDivideSqrt3 9459 //Q14 #define c3Divide2 24576 //Q14 //macro constant for svm use #define cSqrt3Divide2 14189 //Q14 sqrt(3)/2 *Q14 = 14189 #define cSqrt3Divide3 9459 //Q14 sqrt(3)/3 *Q14 = 9459 //macro constant for PLL use #define cSinTabNumb 720 #define cPLLMaxFreqAdjust 904 //Q4 [9Hz*2*pi*Q4 = 1005] #define cPLLFreqAngleGain 42723 //Q20 1/16/8000/pi*180*32768/360 Q20 #define cPLLAngleGainOpen 16777 //cPLLFreqAngleGain * 2 * pi * 16 / 256 8kHz #define cDCI40mA 320 //Q3 #define cDCI64mA 512 //Q3 #define cDCI150mA 1200 //Q3 #define cVSBusVoltFiltGainNum 158 #define cVSBusVoltFiltGainDen 3938 #define cBusSumDivideGridD 702 //8kHz #define cBusSumVoltFiltGainNum 410//208//105 #define cBusSumVoltFiltGainDen 3686//3888//3991 #define cBusSumVoltVKp 5147//5147//2574 #define cBusSumVoltVKi 12//24//6 #define cBusSumVoltKaw 10//19//10 #define cDCCurrFiltGainNum 410 #define cDCCurrFiltGainDen 3686 #define cDCCurrKp 1086//5147 #define cDCCurrKi 2//12 #define cDCCurrKaw 9//10 #define cBusDiffVoltFiltGainNum 0 //8kHz #define cBusDiffVoltFiltGainDen 0 #define cBusDiffVoltKp 774 #define cBusDiffVoltKi 1 #define cBusDiffVoltKaw 1 #define cInvOsCurrLimitHigh 16383 #define cInvOsCurrLimitLow -16383 #define cGridVoltFiltGainNum 26// 26 #define cGridVoltFiltGainDen 998// 998 #define cGridVoltKp 1112//1112//2224//1112 #define cGridVoltKi 5//5//3 #define cGridVoltKaw 10//10//10 //================================== //inverter control #define cInvCurrFiltGainNum 4090//3826// 3498 //3826//3498//3526//3498 //8kHz #define cInvCurrFiltGainDen 6//270// 598 //270//598//570//598 #define cInvCurrKp 9780*2// 4427 // 9780//4427//4632//4427 #define cInvCurrKi 355*2// 57// 355//57//130//57 #define cInvCurrKaw 149// 53// 149//53//115//53 #define cVSCurrFiltGainNum 3045//3826// 3045 #define cVSCurrFiltGainDen 1051//270//1051 #define cVSCurrKp 4890//9780// 4890 #define cVSCurrKi 89//355// 89 #define cVSCurrKaw 74//149// 74 #define cInertiaInvJ 2712;//3255//6510//15523//3255//31047//1/J/8000 Q20 J = D * T 0.02s #define cVSVoltIngQKi 279//556//279//K = T * w * Kv; 0.01s #define cInvPwmK 1135 #define cInvPwmKRec 7390 #define cInvModuLimitHigh 8191 #define cInvModuLimitLow -8191 #define cInvChkUdComp 16321//16182 //16224//16135////15897 #define cInvChkUqComp 1427//2595 //2302//2889////4085 //macro constant for svm use #define cMaxPwm 8160//8191 // #define cMinPwm 32//15 // update on 20100225 for DPWMMIN //50 //==========================================
12-02
还原一下这个函数库里的宏定义,不然调用起来不太好用//宏:定义 #define EPS 1e-9 #define MOD 100000000 //宏:类型 #define in int #define ll long long #define fl float #define db double #define ch char #define vd void //宏:函数 #define sc scanf #define pr printf //宏:其他 #define rt return //宏:输入 #define sc_in(x) sc("%d", &(x)) #define sc_ll(x) sc("%lld", &(x)) #define sc_db(x) sc("%lf", &(x)) #define sc_ch(x) sc("%c", &(x)) #define sc_st(str) sc("%s", (str)) //宏:输出(无换行) #define pr_in(x) pr("%d", x) #define pr_ll(x) pr("%lld", x) #define pr_ch(x) pr("%c", x) #define pr_st(x) pr("%s", x) //宏:输出(有换行) #define pr_inn(x) pr("%d\n", x) #define pr_lln(x) pr("%lld\n", x) #define pr_chn(x) pr("%c\n", x) #define pr_stn(x) pr("%s\n", x) //宏:功能 //浮点相等判断 #define CEPS(a, b) (fabs((a) - (b)) < EPS) //数组长度获取 #define ArrayNum(x) (sizeof(x)/sizeof(x[0])) //函数实现:几何计算 //求平面上两点的距离 db distance_2d(db x1, db y1, db x2, db y2) { db dx = x2 - x1; db dy = y2 - y1; rt sqrt(dx * dx + dy * dy); } //求三角形的面积(2倍) ll triange_area_2(ll x1, ll y1, ll x2, ll y2, ll x3, ll y3) { ll area_2 = (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1); rt area_2 < 0 ? -area_2 : area_2; } //求凸多边形面积(2倍) ll n_triangle_area_2(in n, ll x[], ll y[]) { ll area_2 = 0; for (in i = 0; i < n; i++) { in j = (i + 1) % n; area_2 += x[i] * y[j] - x[j] * y[i]; } rt area_2 > 0 ? area_2 : -area_2; } //函数实现:时间日期 //求某年是否为闰年 in is_leap(in year) { rt(year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0); } //求某年某月的天数 in get_days_of_month(in year, in month) { in days = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = is_leap(year) ? 29 : 28; break; } rt days; } //求某年某月某日为星期几 in get_week_day(in year, in month, in day) { in century, weekday; if (month < 3) { year--; month += 12; } century = year / 100; year %= 100; weekday = (year + year / 4 + century / 4 - 2 * century + (26 * (month + 1)) / 10 + day - 1) % 7; if (weekday < 0) { weekday += 7; } rt weekday; }
12-01
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值