473,325 Members | 2,816 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,325 software developers and data experts.

slight rounding problem

JNY
Hello,

I've searched for a solution, but can't find one.
When adding two numbers I'm not getting the expected result:

int testInt = 3056;
float testMant = 0.9001;
float testTotal;

testTotal = testInt+testMant;

This is producing 3056.9, not 3056.9001 as I would like. Using
doubles doesn't seem to help. Can anyone else?
Nov 14 '05 #1
2 1494
JNY wrote:
Hello,

I've searched for a solution, but can't find one.
When adding two numbers I'm not getting the expected result:

int testInt = 3056;
float testMant = 0.9001;
float testTotal;

testTotal = testInt+testMant;

This is producing 3056.9, not 3056.9001 as I would like. Using
doubles doesn't seem to help. Can anyone else?


Three questions
a) Why do you think floats have infinite precision?
b) Why didn't you check the FAQ before posting?
c) Why didn't you follow the newsgroup before posting. In the last week
similar questions were posted by at least three other people clueless
about this, who also violated usenet ettiquette by posting without
checking the FAQ or following the newsgroup before posting.

See if you can explain this (recompile for the limits of your system):

#include <stdio.h>
#include <float.h>

int main(void)
{
int testInt = 3056;
float testMantf = 0.9001, testTotalf;
double testMant = 0.9001, testTotal;
long double testMantl = 0.9001L, testTotall;

testTotalf = testInt + testMantf;
testTotal = testInt + testMantf;
testTotall = testInt + testMantf;
printf("float addend:\n"
" %d (int) + %.*g (float) = %.*g (float)\n"
" %d (int) + %.*g (float) = %.*g (double)\n"
" %d (int) + %.*g (float) = %.*Lg (long double)\n\n",
testInt, FLT_DIG, testMantf, FLT_DIG, testTotalf,
testInt, FLT_DIG, testMantf, DBL_DIG, testTotal,
testInt, FLT_DIG, testMantf, LDBL_DIG, testTotall);

testTotalf = testInt + testMant;
testTotal = testInt + testMant;
testTotall = testInt + testMant;
printf("double addend:\n"
" %d (int) + %.*g (double) = %.*g (float)\n"
" %d (int) + %.*g (double) = %.*g (double)\n"
" %d (int) + %.*g (double) = %.*Lg (long double)\n\n",
testInt, DBL_DIG, testMant, FLT_DIG, testTotalf,
testInt, DBL_DIG, testMant, DBL_DIG, testTotal,
testInt, DBL_DIG, testMant, LDBL_DIG, testTotall);
testTotalf = testInt + testMantl;
testTotal = testInt + testMantl;
testTotall = testInt + testMantl;
printf("long double addend:\n"
" %d (int) + %.*Lg (long double) = %.*g (float)\n"
" %d (int) + %.*Lg (long double) = %.*g (double)\n"
" %d (int) + %.*Lg (long double) = %.*Lg (long double)\n\n",
testInt, LDBL_DIG, testMantl, FLT_DIG, testTotalf,
testInt, LDBL_DIG, testMantl, DBL_DIG, testTotal,
testInt, LDBL_DIG, testMantl, LDBL_DIG, testTotall);
return 0;
}
float addend:
3056 (int) + 0.9001 (float) = 3056.9 (float)
3056 (int) + 0.9001 (float) = 3056.90014648438 (double)
3056 (int) + 0.9001 (float) = 3056.900146484375 (long double)

double addend:
3056 (int) + 0.9001 (double) = 3056.9 (float)
3056 (int) + 0.9001 (double) = 3056.9001 (double)
3056 (int) + 0.9001 (double) = 3056.90009999999984 (long double)

long double addend:i
3056 (int) + 0.9001 (long double) = 3056.9 (float)
3056 (int) + 0.9001 (long double) = 3056.9001 (double)
3056 (int) + 0.9001 (long double) = 3056.9001 (long double)

Nov 14 '05 #2
JNY wrote:
Hello,

I've searched for a solution, but can't find one.
When adding two numbers I'm not getting the expected result:

int testInt = 3056;
float testMant = 0.9001;
float testTotal;

testTotal = testInt+testMant;

This is producing 3056.9, not 3056.9001 as I would like. Using
doubles doesn't seem to help. Can anyone else?


You need a little more C practice.

#include <stdio.h>
int main(void) {
int testInt = 3056;
float testMant = 0.9001;
float testTotal;
testTotal = testInt+testMant;
printf("testTotal is %.4f\n", testTotal);
return 0;
}

testTotal is 3056.9001 (on my system)

But also, you should be conscious of the fact that floats are binary
and your expected outputs are decimal and that conversions among
number systems are usually inexact.

And more practice is always good.

"Programming is like shaving. If you don't do it every day, you're a
bum."

--
Joe Wright mailto:jo********@comcast.net
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
Nov 14 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Caesar Augustus | last post by:
Hello Tom, Long time listener, first time caller... I have been working with vb code to automate a salary increase process that not only rounds to the nearest penny but also rounds to the...
0
by: Rick Gabel | last post by:
Trying to use the decimal datatype with SQL Server2000 and C#.Net and having a rounding problem. I am using SqlCommand/SqlParameter process to retrieve and insert a record into the table. One...
5
by: Jason | last post by:
I am having a rounding problem in a value i am trying to display in VB.NET. If I have the following code: Dim x As Single = 2726.795 Dim y As Single = Math.Round(2726.795, 2) Dim s as String =...
11
by: cj | last post by:
Lets assume all calculations are done with decimal data types so things are as precise as possible. When it comes to the final rounding to cut a check to pay dividends for example in VB rounding...
4
by: Altman | last post by:
I am having a rounding problem all over the place and am struggling to fix it. My problem is that I have an unit price and a quantity. When I multiply them together they come out to 3.705. I...
29
by: Marco | last post by:
Hello, I have : float f = 36.09999999; When I do : char cf; sprintf(cf,"%0.03lf", f); I get : 36.100
18
by: jdrott1 | last post by:
i'm trying to round my currency string to end in 9. it's for a pricing application. this is the function i'm using to get the item in currency: FormatCurrency(BoxCost, , , , TriState.True) if...
206
by: md | last post by:
Hi Does any body know, how to round a double value with a specific number of digits after the decimal points? A function like this: RoundMyDouble (double &value, short numberOfPrecisions) ...
20
by: jacob navia | last post by:
Hi "How can I round a number to x decimal places" ? This question keeps appearing. I would propose the following solution #include <float.h> #include <math.h>
30
by: bdsatish | last post by:
The built-in function round( ) will always "round up", that is 1.5 is rounded to 2.0 and 2.5 is rounded to 3.0. If I want to round to the nearest even, that is my_round(1.5) = 2 # As...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.