[Gambas-user] Ambiguous expression?
Hi! This; 1\2*3 Yields this; Ambiguous expression. Please use braces But if I write; 1/2*3 Then no problem. Why? Is this planned behaviour? Gambas 3 revision 2664 (old!) Ubuntu 9.10 64bit Jussi -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
I really think yes. Standard symbol for fractions is /, why should you use \? -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
1/2 = 0.5 1\2 = 0 3\2 = 1 \ operator gives only integer part. Jussi On Wed, Mar 10, 2010 at 19:48, Alessandro Rinaldi alerina...@linuxzogno.org wrote: I really think yes. Standard symbol for fractions is /, why should you use \? -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
Wow, interesting! Didn't know it :) Thanks! So, I really don't know what's the problem, have you tried using brackets? -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
Alessandro Rinaldi ha scritto: I really think yes. Standard symbol for fractions is /, why should you use \? Backslash is integer division, and should yeld an integer result. Slash is float division, and yelds a float number (this is Basic syntax; other languages use different methods). The expression 1\2*3 is not really ambiguous, it is only for Gambas (don't ask me why); it should be seen as take an integer number, integer-divide it for another integer number, and multiply the result for another integer number, giving an integer result. About integer division, there are other reasons apart from wanting an *integer* division: for example is faster. Regards, Doriano -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
Alessandro Rinaldi ha scritto: I really think yes. Standard symbol for fractions is /, why should you use \? Backslash is integer division, and should yeld an integer result. Slash is float division, and yelds a float number (this is Basic syntax; other languages use different methods). The expression 1\2*3 is not really ambiguous, it is only for Gambas (don't ask me why); it should be seen as take an integer number, integer-divide it for another integer number, and multiply the result for another integer number, giving an integer result. About integer division, there are other reasons apart from wanting an *integer* division: for example is faster. Regards, Doriano I noticed that operator evaluation order differ between languages, even if they agree on most parts. So I decided to raise an error when the compiler encounters different operators having the same evaluation order weight, and when I thought that the interpreter may not do what the user thinks. By compelling the user to add brackets, I make the source code less ambiguous for another reader, so this is a good thing. But the test is not perfect, and I don't remember why I do not raise the error for 1/2*3 and I raise it for 1\2*3. Maybe because that mixing * and / is usual in mathematics, but mixing an integer division with a normal multiplication not, and I wanted to force the use of brackets. Morever, that error is actually just a warning. I can suppress it, and Gambas will just apply its operator evaluation order without telling anything. But I don't think I will do it! Regards, -- Benoît Minisini -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
Benoît Minisini ha scritto: Alessandro Rinaldi ha scritto: I really think yes. Standard symbol for fractions is /, why should you use \? Backslash is integer division, and should yeld an integer result. Slash is float division, and yelds a float number (this is Basic syntax; other languages use different methods). The expression 1\2*3 is not really ambiguous, it is only for Gambas (don't ask me why); it should be seen as take an integer number, integer-divide it for another integer number, and multiply the result for another integer number, giving an integer result. I noticed that operator evaluation order differ between languages, even if they agree on most parts. So I decided to raise an error when the compiler encounters different operators having the same evaluation order weight, and when I thought that the interpreter may not do what the user thinks. By compelling the user to add brackets, I make the source code less ambiguous for another reader, so this is a good thing. But the test is not perfect, and I don't remember why I do not raise the error for 1/2*3 and I raise it for 1\2*3. Maybe because that mixing * and / is usual in mathematics, but mixing an integer division with a normal multiplication not, and I wanted to force the use of brackets. Perhaps this is because C has / and *, and both have a double meaning (integer and float); pascal has two separated / and DIV, and only one *. So gambas is similar to pascal. When an operator is the same on different types (integer and floats), the compiler checks the arguments of the operator to decide whether promote one of the two (and the result). In this very case, all the arguments are integer, so all the operators are integer too, and there should be no doubt. Anyway, division and multiplication have the same precedence and (probably?) same associativity. But I agree with you: by combining precedence and associativity it is easy to make up a mess, and sometimes a solution like yours is better. The C language has something like 15 or more rules, so who remembers the exact result of *pointer-- 3+1? Morever, that error is actually just a warning. I can suppress it, and Gambas will just apply its operator evaluation order without telling anything. But I don't think I will do it! Uhm... *it is* an error if the compiler refuses to compile... it would be possible to turn it in a warning (does gambas have warnings?), if only one is very sure about promoting. But gambas uses a typing scheme different from C and pascal, and automatic type conversions, so you are probably right in keeping your way. Regards, Doriano -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
Benoît Minisini wrote: Alessandro Rinaldi ha scritto: I really think yes. Standard symbol for fractions is /, why should you use \? Backslash is integer division, and should yeld an integer result. Slash is float division, and yelds a float number (this is Basic syntax; other languages use different methods). The expression 1\2*3 is not really ambiguous, it is only for Gambas (don't ask me why); it should be seen as take an integer number, integer-divide it for another integer number, and multiply the result for another integer number, giving an integer result. About integer division, there are other reasons apart from wanting an *integer* division: for example is faster. Regards, Doriano I noticed that operator evaluation order differ between languages, even if they agree on most parts. So I decided to raise an error when the compiler encounters different operators having the same evaluation order weight, and when I thought that the interpreter may not do what the user thinks. By compelling the user to add brackets, I make the source code less ambiguous for another reader, so this is a good thing. But the test is not perfect, and I don't remember why I do not raise the error for 1/2*3 and I raise it for 1\2*3. Maybe because that mixing * and / is usual in mathematics, but mixing an integer division with a normal multiplication not, and I wanted to force the use of brackets. Morever, that error is actually just a warning. I can suppress it, and Gambas will just apply its operator evaluation order without telling anything. But I don't think I will do it! Regards, You are correct to not suppress it. The warning is correct. The actual value of the numbers is not important. The expression is ambiguous without the brackets. 5 \ (2 * 3) = 0 (5 \ 2) * 3 = 6 This is also ambiguous 5/2*3 5 / (2 * 3) = 0.8333 (5 / 2) * 3 = 7.5 Regards Les Hardy -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Ambiguous expression?
You are correct to not suppress it. The warning is correct. The actual value of the numbers is not important. The expression is ambiguous without the brackets. 5 \ (2 * 3) = 0 (5 \ 2) * 3 = 6 This is also ambiguous 5/2*3 5 / (2 * 3) = 0.8333 (5 / 2) * 3 = 7.5 This is less ambiguous, because it is commonly known that / and * are associative from left to right a * b / c = (a * b) / c. Regards, -- Benoît Minisini -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user