実数をゼロ除算してもエラーが出ないように&実数の剰余パッチ

以前から実数でもゼロ除算時にエラーが出ることに疑問を抱いていたので。文字列の乗算(繰り返し、リフレイン)でも追加してみようと思ったけど、同じ型で演算されるように変換してしまうようだしなー。

--- 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.