Float vs Decimal in ActiveRecord

I remember my CompSci professor saying never to use floats for currency. The reason for that is how the IEEE specification defines floats in binary format. Basically, it stores sign, fraction and exponent to represent a Float. It’s like a scientific notation for binary (something like +1.43*10^2). Because of that, it is impossible to store … Read more

Random float number generation

rand() can be used to generate pseudo-random numbers in C++. In combination with RAND_MAX and a little math, you can generate random numbers in any arbitrary interval you choose. This is sufficient for learning purposes and toy programs. If you need truly random numbers with normal distribution, you’ll need to employ a more advanced method. … Read more

What MySQL data type should be used for Latitude/Longitude with 8 decimal places?

MySQL supports Spatial data types and Point is a single-value type which can be used. Example: CREATE TABLE `buildings` ( `coordinate` POINT NOT NULL, /* Even from v5.7.5 you can define an index for it */ SPATIAL INDEX `SPATIAL` (`coordinate`) ) ENGINE=InnoDB; /* then for insertion you can */ INSERT INTO `buildings` (`coordinate`) VALUES (POINT(40.71727401 … Read more

What does the constant 0.0039215689 represent?

0.0039215689 is approximately equal to 1/255. Seeing that this is OpenGL, performance is probably important. So it’s probably safe to guess that this was done for performance reasons. Multiplying by the reciprocal is faster than repeatedly dividing by 255. Side Note: If you’re wondering why such a micro-optimization isn’t left to the compiler, it’s because … Read more

Python JSON serialize a Decimal object

Simplejson 2.1 and higher has native support for Decimal type: >>> json.dumps(Decimal(‘3.9’), use_decimal=True) ‘3.9’ Note that use_decimal is True by default: def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding=’utf-8′, default=None, use_decimal=True, namedtuple_as_object=True, tuple_as_array=True, bigint_as_string=False, sort_keys=False, item_sort_key=None, for_json=False, ignore_nan=False, **kw): So: >>> json.dumps(Decimal(‘3.9’)) ‘3.9’ Hopefully, this feature will be included in standard library.

What is the rationale for all comparisons returning false for IEEE754 NaN values?

I was a member of the IEEE-754 committee, I’ll try to help clarify things a bit. First off, floating-point numbers are not real numbers, and floating-point arithmetic does not satisfy the axioms of real arithmetic. Trichotomy is not the only property of real arithmetic that does not hold for floats, nor even the most important. … Read more