Skip to content

Updated Float #607

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 35 additions & 6 deletions Language/Variables/Data Types/float.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,7 @@ subCategories: [ "Data Types" ]
=== 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.

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.

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.

If doing math with floats, you need to add a decimal point, otherwise it will be treated as an int. See the link:../../constants/floatingpointconstants[Floating point] constants page for details.
[%hardbreaks]

[float]
Expand Down Expand Up @@ -75,6 +69,41 @@ z = (float)x / 2.0; // z now contains .5 (you have to use 2.0, not 2)
[#see_also]
--

[float]
=== Notes and Warnings

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

Floating point numbers are not exact, and may yield strange results when compared. For example 6.0 / 3.0 may not equal 2.0.
Also, a general problem of truncation arises during conversion from floating point to integer math.
// The example code tells the details of problem of truncation ►►►►► THIS SECTION IS MANDATORY ◄◄◄◄◄
[source,arduino]
----
float x = 2.9; // A float type variable
int y = x; // 2
----
You should instead check that the absolute value of the difference between the numbers is less than some small number.

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.
If performing the process of rounding off during the conversion process, you need to add `0.5` during the conversion process.
// The example code tells the details of rounding off ►►►►► THIS SECTION IS MANDATORY ◄◄◄◄◄
[source,arduino]
----
float x = 2.9;
int y = x + 0.5; // 3
----
or use the `round()` function respectively.

// The example code tells the details of rounding off ►►►►► THIS SECTION IS MANDATORY ◄◄◄◄◄
[source,arduino]
----
float x = 2.9;
int y = round(x); // 3
----

If doing math with floats, you need to add a decimal point, otherwise it will be treated as an int. See the link:../../constants/floatingpointconstants[Floating point] constants page for details.

[%hardbreaks]
[float]
=== See also

Expand Down