Оказывается, в Microsoft Excel приоритет унарного минуса выше всего на свете, и поэтому -x*x - это (-x)*(x), а -x^2 - это (-x)^2, то есть результаты закономерно разные.
john-jack утверждает, что это вообще всегда так и должно быть очевидно каждому программисту, но мой опыт протестует.
Давайте проверим.
Для начала - легендарный GW-BASIC, из которого вырос
(
Read more... )
Comments 26
Я учился на Фортране и Пиэле. Базик изучил, когда его ставил.
Reply
Reply
Ставил, в смысле преподавал. Сам не знал, но научился. Трудно было с индусами.
Reply
в powershell возведение в степень - функция, поэтому сложно интерпретировать неправильно. Скобки всё-таки.
PS> [math]::pow(-2,2)
4
PS> -[math]::pow(2,2)
-4
Reply
Но это не очень интересно - когда функция, нет места неоднозначности. В том же Паскале есть аналогичная функция. И в Oracle SQL есть. Но повода для срача - нет...
Reply
Такая же логика в MS Word (если вставлять поля):
{ =-2*2 } дает -4
{ =-2^2 } дает 4
Но вообще наблюдение интересное! )
Не зря я до сих пор из чуства паранои везде, где можно, явно ставлю скобки. Хоте здесь я бы про скобки не подумал даже...
Reply
Reply
в 1С нет операнда ^.
Есть функция Pow(), но это не считается...
Reply
C:
#include
int main()
{
int x = 2;
printf("-x*x = %d, -x^2 = %d\n",-x*x,-x^2);
}Одинаково
FORTRAN:
program hello
integer x
x = 2
print *, -x*x, -x**2
end program helloОдинаково
Lua:
x = 2; print (-x*x, -x^2)Одинаково, только степенной оператор превращает число в вещественное
Rust:
fn main() {
let x = 2i32;
println!("-x*x = {}, -x^2 = {}",-x*x,-x^2);
}Одинаково
Go:
package main
import "fmt"
func main() {
var x int = 2;
fmt.Printf("-x*x = %d, -x^2 = %d\n",-x*x,-x^2)
}Одинаково
VB.NET:
Public Module Program
Public Sub Main(args() As string)
dim x as Integer
x = 2
Console.WriteLine("-x*x = "&str$(-x*x)&", -x^2 = "&str$(-x^2))
End Sub
End ModuleОдинаково
COBOL:
IDENTIFICATION DIVISION.
PROGRAM-ID. MULTIPLICATION-VS-EXPONENTATION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 X PIC S9(6).
01 XX PIC S9(6).
01 XS PIC S9(6).
PROCEDURE DIVISION.
MOVE 2 TO X
COMPUTE XX EQUAL - X * X
COMPUTE XS EQUAL - X ** 2
DISPLAY '-X*X = ',XX,', -X^2 = ',XS
STOP RUN.А ( ... )
Reply
std::cout << ( - 2 * 2) << std::endl;
std::cout << ( - 2 ^ 2) << std::endl;
-4
-4
Надо ещё найти в завалах программатор и какую-нибудь плату на Cortex M3, посмотреть, что там...
Reply
Reply
Leave a comment