aboutsummaryrefslogtreecommitdiffstats
path: root/source/arduino/float.rst
diff options
context:
space:
mode:
Diffstat (limited to 'source/arduino/float.rst')
-rw-r--r--source/arduino/float.rst85
1 files changed, 26 insertions, 59 deletions
diff --git a/source/arduino/float.rst b/source/arduino/float.rst
index 2f83a67..683f32d 100644
--- a/source/arduino/float.rst
+++ b/source/arduino/float.rst
@@ -1,88 +1,55 @@
+.. highlight:: cpp
+
.. _arduino-float:
float
=====
+.. TODO move all the useful examples over to arduino/double.rst. We
+.. want to discourage using floats, since most of the common cmath
+.. functions are only declared with doubles.
+
Description
-----------
-Datatype for floating-point numbers, a number that has a decimal
-point. Floating-point numbers are often used to approximate analog
-and continuous values because they have greater resolution than
-integers. Floating-point numbers can be as large as 3.4028235E+38
-and as low as -3.4028235E+38. They are stored as 32 bits (4 bytes)
-of information.
-
-
-
-Floats have only 6-7 decimal digits of precision. That means the
-total number of digits, not the number to the right of the decimal
-point. Unlike other platforms, where you can get more precision by
-using a double (e.g. up to 15 digits), on the Arduino, double is
-the same size as float.
-
-
+Single-precision floating point number. ``float`` values can be as
+large as 3.4028235E+38 and as low as -3.4028235E+38. They are stored
+as 32 bits (4 bytes) of information.
-Floating point numbers are not exact, and may yield strange results
-when compared. For example ``6.0 / 3.0`` may not equal ``2.0``. You
-should instead check that the absolute value of the difference
-between the numbers is less than some small number.
+``float``\ s have only 6-7 decimal digits of precision. That means the total
+number of digits, not the number to the right of the decimal point.
+You can get more precision by using a :ref:`double <arduino-double>`
+(which has a precision of about 16 decimal digits).
-
-
-Floating point math is also much slower than integer math in
-performing calculations, so should be avoided if, for example, a
-loop has to run at top speed for a critical timing function.
-Programmers often go to some lengths to convert floating point
-calculations to integer math to increase speed.
-
-
-
-Examples
---------
-
-::
+The following example declares a ``float`` value named ``myfloat``::
float myfloat;
- float sensorCalbrate = 1.117;
-
+This example declares a ``float`` value named ``sensorCalibrate``,
+with value 1.117::
-Syntax
-------
+ float sensorCalibrate = 1.117;
-::
+The general syntax for declaring a float named ``var`` with value
+``val`` is::
float var = val;
-
-
-
-- var - your float variable name
-- val - the value you assign to that variable
-
-
-
-Example Code
-------------
-
-::
+Here is a more extended example involving a :ref:`float cast
+<arduino-floatcast>`::
int x;
int y;
float z;
x = 1;
- y = x / 2; // y now contains 0, ints can't hold fractions
- z = (float)x / 2.0; // z now contains .5 (you have to use 2.0, not 2)
-
-
+ y = x / 2; // y now contains 0, ints can't hold fractions
+ z = float(x) / 2; // z now contains .5
See Also
--------
-
-- `int <http://arduino.cc/en/Reference/Int>`_
-- `double <http://arduino.cc/en/Reference/Double>`_
-- `Variable Declaration <http://arduino.cc/en/Reference/VariableDeclaration>`_
+- :ref:`int <arduino-int>`
+- :ref:`double <arduino-double>`
+- :ref:`Variables <arduino-variables>`