⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ptfuncs.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1987 Wayne A. Christopher, U. C. Berkeley CAD Group **********//* * All the functions used in the parse tree.  These functions return HUGE * if their argument is out of range. */#include "spice.h"#include <stdio.h>#include "ifsim.h"#include "inpptree.h"#include "suffix.h"/* XXX These should be in math.h */#ifdef HAS_ATRIGH#  ifdef HAS_NO_ATRIGH_DECLextern double asinh(), acosh(), atanh();#  endif#endif /* HAS_ATRIGH */double PTfudge_factor;#define	MODULUS(NUM,LIMIT)	((NUM) - ((int) ((NUM) / (LIMIT))) * (LIMIT))doublePTabs(arg)    double arg;{    return arg >= 0.0 ? arg : -arg;}doublePTsgn(arg)    double arg;{    return arg > 0.0 ? 1.0 : arg < 0.0 ? -1.0 : 0.0;}doublePTplus(arg1, arg2)    double arg1, arg2;{    return (arg1 + arg2);}doublePTminus(arg1, arg2)    double arg1, arg2;{    return (arg1 - arg2);}doublePTtimes(arg1, arg2)    double arg1, arg2;{    return (arg1 * arg2);}double PTdivide(arg1, arg2)    double arg1, arg2;{    if (arg2 >= 0.0)	arg2 += PTfudge_factor;    else	arg2 -= PTfudge_factor;    if (arg2 == 0.0)        return (HUGE);    return (arg1 / arg2);}doublePTpower(arg1, arg2)    double arg1, arg2;{    if (arg1 < 0.0) {	if (fabs(arg2 - ((int) arg2)) / (arg2 + 0.001) < 0.000001) {	    arg2 = (int) arg2;	} else {	    arg1 = -arg1;	}    }    return (pow(arg1, arg2));}doublePTacos(arg)    double arg;{    return (acos(arg));}doublePTacosh(arg)    double arg;{#ifdef HAS_ATRIGH    return (acosh(arg));#else    if (arg < 1.0)	arg = 1.0;    return (log(arg + sqrt(arg*arg-1.0)));#endif /* HAS_ATRIGH */}doublePTasin(arg)    double arg;{    return (asin(arg));}doublePTasinh(arg)    double arg;{#ifdef HAS_ATRIGH    return (asinh(arg));#else    return log(arg + sqrt(arg * arg + 1.0));#endif /* HAS_ATRIGH */}doublePTatan(arg)    double arg;{    return (atan(arg));}doublePTatanh(arg)    double arg;{#ifdef HAS_ATRIGH    return (atanh(arg));#else    if (arg < -1.0)	arg = -1.0 + PTfudge_factor + 1e-10;    else if (arg > 1.0)	arg = 1.0 - PTfudge_factor - 1e-10;    return (log((1.0 + arg) / (1.0 - arg)) / 2.0);#endif /* HAS_ATRIGH */}doublePTustep(arg)    double arg;{    if (arg < 0.0)	return 0.0;    else if (arg > 0.0)	return 1.0;    else	return 0.5; /* Ick! */}doublePTuramp(arg)    double arg;{    if (arg < 0.0)	return 0.0;    else	return arg;}doublePTcos(arg)    double arg;{    return (cos(MODULUS(arg, 2 * M_PI)));}doublePTcosh(arg)    double arg;{    return (cosh(arg));}doublePTexp(arg)    double arg;{    return (exp(arg));}doublePTln(arg)    double arg;{    if (arg < 0.0)	arg = -arg;    return (log(arg));}doublePTlog(arg)    double arg;{    if (arg < 0.0)	arg = -arg;    return (log10(arg));}doublePTsin(arg)    double arg;{    return (sin(MODULUS(arg, 2 * M_PI)));}doublePTsinh(arg)    double arg;{    return (sinh(arg));}doublePTsqrt(arg)    double arg;{    if (arg < 0.0)	arg = -arg;    return (sqrt(arg));}doublePTtan(arg)    double arg;{    return (tan(MODULUS(arg, M_PI)));}doublePTtanh(arg)    double arg;{    return (tanh(arg));}doublePTuminus(arg)    double arg;{    return (- arg);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -