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

📄 doubleinstruction.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000 Trolltech AS.  All rights reserved.**** This file is part of Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "doubleinstruction.h"#ifdef ENABLE_INTEGER#include "integerdata.h"#endif#ifdef ENABLE_FRACTION#include "fractiondata.h"#endif#include "engine.h"// Maths libraries#include <qtopia/qmath.h>#include <math.h>// Base class automatic type castingBaseDoubleInstructionDescription::BaseDoubleInstructionDescription()    :InstructionDescription() {    typeOne = typeTwo = type = "Double"; // No tr}Data *BaseDoubleInstruction::eval(Data *d) {    doubleNum = (DoubleData *)num;    Data *ret = doEval((DoubleData *)d);    return ret;}// FactoryData * iDoubleFactory::eval(Data * /* d */) {    DoubleData *ret = new DoubleData();    ret->clear();    return ret;}DoubleFactory::DoubleFactory():BaseDoubleInstructionDescription() {    instructionName = "Factory"; // No tr};// CopyData *iDoubleCopy::eval(Data *d) {    DoubleData *ret = new DoubleData();    ret->clear();    ret->set(((DoubleData *)d)->get());    return ret;};DoubleCopy::DoubleCopy():BaseDoubleInstructionDescription() {    instructionName = "Copy"; // No tr};#ifdef ENABLE_INTEGERData * iConvertIntDouble::eval(Data *d) {    DoubleData *ret = new DoubleData();;    IntegerData *i = (IntegerData *)d;    ret->set((double)i->get());    return ret;}ConvertIntDouble::ConvertIntDouble():InstructionDescription() {    instructionName = "Convert"; // No tr    typeOne = "Int";    typeTwo = "Double"; // No tr}#endif#ifdef ENABLE_FRACTIONData * iConvertFractionDouble::eval(Data *d) {    DoubleData *ret = new DoubleData();    FractionData *f = (FractionData *)d;    if (!f->getDenominator()) {	systemEngine->setError(eDivZero);	ret->set(0);    } else {	double num = f->getNumerator();	double den = f->getDenominator();	double val = num / den;	ret->set(val);    }    return ret;}ConvertFractionDouble::ConvertFractionDouble():InstructionDescription() {    instructionName = "Convert"; // No tr    typeOne = "Fraction"; // No tr    typeTwo = "Double"; // No tr}#endif// Mathematical functionsData * iAddDoubleDouble::doEval(DoubleData *d) {//qDebug("%d + %d", doubleNum->get(),d->get());    d->set(doubleNum->get() + d->get());//qDebug("= %d",d->get());    return d;}Data * iSubtractDoubleDouble::doEval(DoubleData *d) {    d->set(doubleNum->get() - d->get());    return d;}Data * iMultiplyDoubleDouble::doEval(DoubleData *d) {    d->set( doubleNum->get() * d->get() );    return d;}Data * iDivideDoubleDouble::doEval(DoubleData *d) {    d->set( doubleNum->get() / d->get() );    return d;}Data * iDoublePow::doEval(DoubleData *d) {    d->set( pow(doubleNum->get(),d->get()) );    return d;}DoubleXRootY::DoubleXRootY():BaseDoubleInstructionDescription() {    instructionName = "X root y"; // No tr    precedence = 20;}// ImmediateData * iDoubleSin::doEval(DoubleData *d) {    d->set( qSin(d->get()) );    return d;}Data * iDoubleCos::doEval(DoubleData *d) {    d->set( qCos(d->get()) );    return d;}Data * iDoubleTan::doEval(DoubleData *d) {    d->set( qTan(d->get()) );    return d;}Data * iDoubleASin::doEval(DoubleData *d) {    d->set( asin(d->get()) );    return d;}Data * iDoubleACos::doEval(DoubleData *d) {    d->set( acos(d->get()) );    return d;}Data * iDoubleATan::doEval(DoubleData *d) {    d->set( atan(d->get()) );    return d;}Data * iDoubleLog::doEval(DoubleData *d) {    d->set( log10(d->get()) );    return d;}Data * iDoubleLn::doEval(DoubleData *d) {    d->set( log(d->get()) );    return d;}Data * iDoubleExp::doEval(DoubleData *d) {    d->set( exp(d->get()) );    return d;}Data * iDoubleOneOverX::doEval(DoubleData *d) {    d->set( 1 / d->get() );    return d;}Data * iDoubleFactorial::doEval(DoubleData *d) {    if (d->get() < 0) {	systemEngine->setError(eNonPositive);    } else if ( d->get() > 180 ) {	systemEngine->setError(eOutOfRange);    } else if ( d->get() != int(d->get()) ) {	systemEngine->setError(eNonInteger);    } else {	int count = (int)d->get();	d->set(1);	while (count) {	    d->set(d->get()*count);	    count--;	}    }    return d;}Data * iDoubleSquareRoot::doEval(DoubleData *d) {    d->set( sqrt(d->get()) );    return d;}Data * iDoubleCubeRoot::doEval(DoubleData *d) {#ifndef Q_OS_WIN32    d->set( cbrt(d->get()) );#else    qDebug("Cubic root not available for WIN32");#endif    return d;}Data * iDoubleXRootY::doEval(DoubleData *d) {    d->set( pow(doubleNum->get(), 1 / d->get()) );    return d;}Data * iDoubleSquare::doEval(DoubleData *d) {    d->set( d->get() * d->get() );    return d;}Data * iDoubleNegate::doEval(DoubleData *d) {    d->set( 0 - d->get() );    return d;}AddDoubleDouble::AddDoubleDouble():BaseDoubleInstructionDescription() {    instructionName = "Add"; // No tr    precedence = 10;}SubtractDoubleDouble::SubtractDoubleDouble():BaseDoubleInstructionDescription() {    instructionName = "Subtract"; // No tr    precedence = 10;}MultiplyDoubleDouble::MultiplyDoubleDouble():BaseDoubleInstructionDescription() {    instructionName = "Multiply"; // No tr    precedence = 15;}DivideDoubleDouble::DivideDoubleDouble():BaseDoubleInstructionDescription() {    instructionName = "Divide"; // No tr    precedence = 15;}DoublePow::DoublePow():BaseDoubleInstructionDescription() {    instructionName = "Pow";    precedence = 20;}DoubleSin::DoubleSin():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Sin";}DoubleCos::DoubleCos():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Cos";}DoubleTan::DoubleTan():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Tan"; // No tr}DoubleASin::DoubleASin():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "aSin";}DoubleACos::DoubleACos():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "aCos";}DoubleATan::DoubleATan():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "aTan";}DoubleLog::DoubleLog():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Log";}DoubleLn::DoubleLn():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Ln";}DoubleExp::DoubleExp():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Exp";}DoubleOneOverX::DoubleOneOverX():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "One over x"; // No tr}DoubleFactorial::DoubleFactorial():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Factorial"; // No tr}DoubleSquareRoot::DoubleSquareRoot():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Square root"; // No tr}DoubleCubeRoot::DoubleCubeRoot():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Cube root"; // No tr}DoubleSquare::DoubleSquare():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Square"; // No tr}DoubleNegate::DoubleNegate():BaseDoubleInstructionDescription() {    precedence = 0;    argCount = 1;    instructionName = "Negate"; // No tr}

⌨️ 快捷键说明

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