実数をゼロ除算してもエラーが出ないように&実数の剰余パッチ
以前から実数でもゼロ除算時にエラーが出ることに疑問を抱いていたので。文字列の乗算(繰り返し、リフレイン)でも追加してみようと思ったけど、同じ型で演算されるように変換してしまうようだしなー。
--- hspvar_double.cpp.orig Mon Jan 14 09:30:26 2008 +++ hspvar_double.cpp Sat Feb 16 09:43:35 2008 @@ -6,6 +6,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <math.h> #include "hspvar_core.h" #include "hsp3debug.h" #include "strbuf.h" @@ -157,11 +158,19 @@ static void HspVarDouble_DivI( PDAT *pval, const void *val ) { double p = *((double *)(val)); - if ( p == 0 ) throw( HSPVAR_ERROR_DIVZERO ); + //if ( p == 0 ) throw( HSPVAR_ERROR_DIVZERO ); *GetPtr(pval) /= p; *aftertype = HSPVAR_FLAG_DOUBLE; } +// Mod +static void HspVarDouble_ModI( PDAT *pval, const void *val ) +{ + double p = *((double *)(val)); + *GetPtr(pval) = fmod( *GetPtr(pval), p ); + *aftertype = HSPVAR_FLAG_DOUBLE; +} + // Eq static void HspVarDouble_EqI( PDAT *pval, const void *val ) { @@ -245,7 +254,7 @@ p->SubI = HspVarDouble_SubI; p->MulI = HspVarDouble_MulI; p->DivI = HspVarDouble_DivI; -// p->ModI = HspVarDouble_Invalid; + p->ModI = HspVarDouble_ModI; // p->AndI = HspVarDouble_Invalid; // p->OrI = HspVarDouble_Invalid;
OpenHSP Copyright (C) 1997-2008, Onion Software/onitama, all rights reserved. This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed.