📄 div_expr.cc
字号:
/* HYSDEL Copyright (C) 1999-2002 Fabio D. Torrisi This file is part of HYSDEL. HYSDEL is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. HYSDEL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA CONTACT INFORMATION =================== Fabio D. Torrisi ETH Zentrum Physikstrasse. 3 ETL, CH-8032 Zurich Switzerland mailto:torrisi@aut.ee.ethz.ch (preferred)*/#include "Div_expr.h"#include "Affine_func.h"#include "Real_number.h"#include <stdio.h>#include "Globals.h"#include "Problem.h"#include "Problem_handler.h"void Div_expr::semantic_checks() { left->semantic_checks(); assert(left->is_real()); //fine right->semantic_checks(); assert(right->is_real()); //fine}Affine_func * Div_expr::compute_affine() const { Affine_func * aff; assert(right->is_const()); //fine aff = left->compute_affine(); aff->div_const(right->clone()); return aff;}bool Div_expr::is_affine() const { return left->is_affine() && right->is_const();}bool Div_expr::is_number() const { return left->is_number() && right->is_number();}Number * Div_expr::compute_number() const { Real_number * l, * r; l = (Real_number *) left->compute_number(); r = (Real_number *) right->compute_number(); l->div(r); return l;}string Div_expr::arg_range_check_matlab() const { string res; string msg; char buf[100]; res += Binary_expr::arg_range_check_matlab(); if (right->is_number()) { if (((Real_number *) right->compute_number())->is_zero()) { sprintf(buf, "line %d: ", get_source_line()); msg = buf; msg += string("division by zero (") + right->get_source() + string(")"); globals->problem_handler->process( new Problem(ERROR, msg)); } } else if (right->is_const()) { res += string("if ") + right->to_matlab() + string(" = 0\n") + string("\terror(\'"); sprintf(buf, "line %d: ", get_source_line()); res += buf; res += string("division by zero (") + right->get_source() + string(")"); res += string("\');\nend\n"); } return res;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -