Thread overview | ||||||
---|---|---|---|---|---|---|
|
May 02, 2013 a FOR loop and floating variables | ||||
---|---|---|---|---|
| ||||
I have this code : import std.stdio; import std.c.stdlib; void main() { int fahr; write("F\tC\n"); for (fahr = 0; fahr <= 300; fahr = fahr + 20) write(fahr, "\t", (5.0/9.0)*(fahr-32), "\n"); write("Done!\n"); exit (0); } Which works. but if I change the "5.0" for "5" I get cero on the celsius side. import std.stdio; import std.c.stdlib; void main() { int fahr; write("F\tC\n"); for (fahr = 0; fahr <= 300; fahr = fahr + 20) write(fahr, "\t", (5/9)*(fahr-32), "\n"); write("Done!\n"); exit (0); } So why is this ? |
May 02, 2013 Re: a FOR loop and floating variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Carlos | On 2013-05-02, 20:14, Carlos wrote: > I have this code : > > import std.stdio; > import std.c.stdlib; > void main() > { > int fahr; > write("F\tC\n"); > for (fahr = 0; fahr <= 300; fahr = fahr + 20) > write(fahr, "\t", (5.0/9.0)*(fahr-32), "\n"); > write("Done!\n"); > exit (0); > } > Which works. but if I change the "5.0" for "5" I get cero on the celsius side. > > import std.stdio; > import std.c.stdlib; > void main() > { > int fahr; > write("F\tC\n"); > for (fahr = 0; fahr <= 300; fahr = fahr + 20) > write(fahr, "\t", (5/9)*(fahr-32), "\n"); > write("Done!\n"); > exit (0); > } > > So why is this ? Both 5 and 9 in the second example are integers (int). When you divide one int by another, the result is an int, and hence (5/9) is 0. -- Simen |
May 02, 2013 Re: a FOR loop and floating variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Carlos | Dne 2.5.2013 20:14, Carlos napsal(a):
> I have this code :
>
> import std.stdio;
> import std.c.stdlib;
> void main()
> {
> int fahr;
> write("F\tC\n");
> for (fahr = 0; fahr <= 300; fahr = fahr + 20)
> write(fahr, "\t", (5.0/9.0)*(fahr-32), "\n");
> write("Done!\n");
> exit (0);
> }
> Which works. but if I change the "5.0" for "5" I get cero on the
> celsius side.
>
> import std.stdio;
> import std.c.stdlib;
> void main()
> {
> int fahr;
> write("F\tC\n");
> for (fahr = 0; fahr <= 300; fahr = fahr + 20)
> write(fahr, "\t", (5/9)*(fahr-32), "\n");
> write("Done!\n");
> exit (0);
> }
>
> So why is this ?
Hi Carlos,
the second code performs integral division which very much behave like floating-point division, but the fractional part is chopped off.
5/9 ~ 0.556 => 0
10/9 ~ 1.111 => 1
If you want precise (i.e. floating point) results, you have to have at least one float or double in your equation.
This would work:
write(fahr, "\t", (5.0/9)*(fahr-32), "\n");
Regards,
Martin
|
May 02, 2013 Re: a FOR loop and floating variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjaeraas | Simen Kjaeraas:
> Both 5 and 9 in the second example are integers (int). When you divide
> one int by another, the result is an int, and hence (5/9) is 0.
Yes, smarter languages (like Pascal..., but also Python, Ada, etc) have two different division operators to avoid such silly C semantics, that sometimes causes bugs.
Bye,
bearophile
|
Copyright © 1999-2021 by the D Language Foundation