digitalmars.D.learn - a FOR loop and floating variables
- Carlos (26/26) May 02 2013 I have this code :
- Simen Kjaeraas (5/31) May 02 2013 Both 5 and 9 in the second example are integers (int). When you divide
- bearophile (6/9) May 02 2013 Yes, smarter languages (like Pascal..., but also Python, Ada,
- =?UTF-8?B?TWFydGluIERyYcWhYXI=?= (12/38) May 02 2013 Hi Carlos,
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
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
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
May 02 2013
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