]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
Use double for cvar values. Fixes a number of bugs caused by atof precision loss
authorcloudwalk <cloudwalk@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 24 Jun 2020 16:48:10 +0000 (16:48 +0000)
committercloudwalk <cloudwalk@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 24 Jun 2020 16:48:10 +0000 (16:48 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12732 d7cf8633-e32d-0410-b094-e92efae38249

cvar.c
cvar.h

diff --git a/cvar.c b/cvar.c
index 905fa758a6f10b1b8817982635c8fca9324e9235..aff7672ac3894629770ec98fabd0d6850ff53149 100644 (file)
--- a/cvar.c
+++ b/cvar.c
@@ -111,7 +111,7 @@ match:
 Cvar_VariableValue
 ============
 */
-float Cvar_VariableValueOr(cvar_state_t *cvars, const char *var_name, float def, int neededflags)
+float Cvar_VariableValueOr(cvar_state_t *cvars, const char *var_name, double def, int neededflags)
 {
        cvar_t *var;
 
@@ -459,22 +459,22 @@ void Cvar_Set_NoCallback(cvar_t *var, const char *value)
 Cvar_SetValue
 ============
 */
-void Cvar_SetValueQuick(cvar_t *var, float value)
+void Cvar_SetValueQuick(cvar_t *var, double value)
 {
        char val[MAX_INPUTLINE];
 
-       if ((float)((int)value) == value)
+       if ((double)((int)value) == value)
                dpsnprintf(val, sizeof(val), "%i", (int)value);
        else
                dpsnprintf(val, sizeof(val), "%f", value);
        Cvar_SetQuick(var, val);
 }
 
-void Cvar_SetValue(cvar_state_t *cvars, const char *var_name, float value)
+void Cvar_SetValue(cvar_state_t *cvars, const char *var_name, double value)
 {
        char val[MAX_INPUTLINE];
 
-       if ((float)((int)value) == value)
+       if ((double)((int)value) == value)
                dpsnprintf(val, sizeof(val), "%i", (int)value);
        else
                dpsnprintf(val, sizeof(val), "%f", value);
diff --git a/cvar.h b/cvar.h
index e7234b1713b1e6da34a7dce12e2989ddb7eaf8e8..aa36f6262be620c3fb0349b0b536766a760eae0c 100644 (file)
--- a/cvar.h
+++ b/cvar.h
@@ -124,8 +124,8 @@ typedef struct cvar_s
        const char *string;
        const char *description;
        int integer;
-       float value;
-       float vector[3];
+       double value;
+       double vector[3];
 
        const char *defstring;
 
@@ -141,8 +141,8 @@ typedef struct cvar_s
        const char *initstring;
        const char *initdescription;
        int initinteger;
-       float initvalue;
-       float initvector[3];
+       double initvalue;
+       double initvector[3];
        const char *initdefstring;
 
        int globaldefindex[3];
@@ -193,12 +193,12 @@ void Cvar_Set (cvar_state_t *cvars, const char *var_name, const char *value);
 void Cvar_Set_NoCallback (cvar_t *var, const char *value);
 
 /// expands value to a string and calls Cvar_Set
-void Cvar_SetValue (cvar_state_t *cvars, const char *var_name, float value);
+void Cvar_SetValue (cvar_state_t *cvars, const char *var_name, double value);
 
 void Cvar_SetQuick (cvar_t *var, const char *value);
-void Cvar_SetValueQuick (cvar_t *var, float value);
+void Cvar_SetValueQuick (cvar_t *var, double value);
 
-float Cvar_VariableValueOr (cvar_state_t *cvars, const char *var_name, float def, int neededflags);
+float Cvar_VariableValueOr (cvar_state_t *cvars, const char *var_name, double def, int neededflags);
 // returns def if not defined
 
 float Cvar_VariableValue (cvar_state_t *cvars, const char *var_name, int neededflags);