О приоритетах-2

Jan 10, 2024 13:28


Оказывается, в Microsoft Excel приоритет унарного минуса выше всего на свете, и поэтому -x*x - это (-x)*(x), а -x^2 - это (-x)^2, то есть результаты закономерно разные. john-jack утверждает, что это вообще всегда так и должно быть очевидно каждому программисту, но мой опыт протестует.
Давайте проверим.
Для начала - легендарный GW-BASIC, из которого вырос ( Read more... )

бред, excel, ЭВМ, обмен опытом

Leave a comment

Comments 26

serega133 January 10 2024, 12:01:56 UTC

Я учился на Фортране и Пиэле. Базик изучил, когда его ставил.

Reply

hardsign January 10 2024, 12:05:01 UTC
Ну так извлеките из-под подушки пачку перфокарт, сдуйте пыль с терминала, брызните WD-шкой в магнитный барабан и порадуйте нас результатами вычислений!

Reply

serega133 January 10 2024, 13:38:43 UTC

Ставил, в смысле преподавал. Сам не знал, но научился. Трудно было с индусами.

Reply


alco42 January 10 2024, 12:18:47 UTC

в powershell возведение в степень - функция, поэтому сложно интерпретировать неправильно. Скобки всё-таки.

PS> [math]::pow(-2,2)

4

PS> -[math]::pow(2,2)

-4

Reply

hardsign January 10 2024, 12:21:22 UTC
Спасибо.
Но это не очень интересно - когда функция, нет места неоднозначности. В том же Паскале есть аналогичная функция. И в Oracle SQL есть. Но повода для срача - нет...

Reply


avoitovich January 10 2024, 13:04:02 UTC

Такая же логика в MS Word (если вставлять поля):

{ =-2*2 } дает -4

{ =-2^2 } дает 4

Но вообще наблюдение интересное! )

Не зря я до сих пор из чуства паранои везде, где можно, явно ставлю скобки. Хоте здесь я бы про скобки не подумал даже...

Reply

hardsign January 10 2024, 13:17:00 UTC
А в 1С?

Reply

avoitovich January 10 2024, 13:38:43 UTC

в 1С нет операнда ^.

Есть функция Pow(), но это не считается...

Reply


hardsign January 10 2024, 15:59:32 UTC
Эх, никто не комментирует, буду сам развлекаться:

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


vladimir_akinin January 10 2024, 16:02:56 UTC
C++, подозреваю, что без плюсов будет то же самое

std::cout << ( - 2 * 2) << std::endl;
std::cout << ( - 2 ^ 2) << std::endl;

-4
-4

Надо ещё найти в завалах программатор и какую-нибудь плату на Cortex M3, посмотреть, что там...

Reply

hardsign January 10 2024, 16:05:00 UTC
Ага, спасибо. Без плюсов я уже проверил. И даже COBOL проверил :))

Reply


Leave a comment

Up