c# - smallest float that can be summed to another float -


assuming there's float number 7 digits how find smallest number can added float?

example 1: 1234.567f + 0000.001f = 1234.568f

example 2: 0.01234567 + 0.00000001f = 0.01234568f

op added c# after posting of c answer.

will leave c solution reference.


print number out in exponential format , change each digit, '0' or '1'

float smallest_float_summable(float f, int digs) {   char buf[20];    sprintf(buf, "%.*e", digs - 1, f);   char *p = buf;   while (*p != 'e') {     if (isdigit(*p)) {       *p = '0' + (p[1] == 'e');     }     p++;   }   float y;   sscanf(buf, "%e", &y);   return y; }   printf("%e\n", smallest_float_summable(1234.567f, 7));  // 1.000000e-03 

this not smallest typically number near 1/2 value of smallest_float_summable() effect change, yet seems match op's intent.


to smallest number effect change, simple use nextafter()

the nextafter functions determine next representable value, in type of function, after x in direction of y ... c11dr §7.12.11.3 2

#include <math.h> float smallest_change(float f) {   float dif = f - nextafterf(f, 0);   return dif; } 

[edit]

@aka.nice correctly points out smaller, maybe 1/2 dif effect change. ponder this.


Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -