LINUX.ORG.RU
ФорумTalks

питон как калькулятор?


0

0

Все говорят какой классный калькулятор из питона. Сижу, проверяю математику, на нетбуке bc нет, отлично - там есть питон!

/home/user> python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 9.83-1.76-3.28+0.11
4.9000000000000012
>>>

Это у него шутки такие или он теперь вычитать и складывать не умеет?

★★★★★

$ awk 'BEGIN{print 9.83-1.76-3.28+0.11}'
4,9
$ echo '#include <stdio.h>\nmain(){\nint r=10;\nprintf("%f%c",9.83-1.76-3.28+0.11,r);\nreturn 0;\n}' > 123.c && gcc -o 123 123.c && ./123
4.900000

saahriktu ★★★★★
()

Сына, если кратко, это боян :)

FiXer ★★☆☆☆
()
Ответ на: комментарий от dimon555

$ echo '#include <stdio.h>\nmain(){\nint r=10;\nprintf("%.20llf%c",(long double) 1/3,r);\nreturn 0;\n}' > 123.c && gcc -o 123 123.c && ./123
0.33333333333333333334
$ echo '#include <stdio.h>\n#include <math.h>\nmain(){\nint r=10;\nprintf("%.52llf%c",(long double) sqrt(2),r);\nreturn 0;\n}' > 123.c && gcc -o 123 123.c -lm && ./123
1.4142135623730951454746218587388284504413604736328125

saahriktu ★★★★★
()
Ответ на: комментарий от sin_a

> А раздели-ка три на два? Ага, не забыл после одного из чисел точечку поставить?

Извините, товарищ...

Hugs> 3/2 :: Double

1.5

Miguel ★★★★★
()

% irb1.9                                                                 
irb(main):001:0> 9.83-1.76-3.28+0.11
=> 4.9

Voker57 ★★
()

:-)

echo "program calc; begin writeln(9.83-1.76-3.28+0.11) end." > calc.pas && fpc calc.pas && ./calc
Free Pascal Compiler version 2.2.2 [2008/12/22] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Linux for i386
Compiling calc.pas
Linking calc
1 lines compiled, 0.2 sec 
 4.9000000000000000E+0000

record ★★★★★
()
Ответ на: комментарий от sin_a

>Ничё не знаю, bc считал правильно. 

Наглая ложь.
[me@my ~]$ bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
(1/3)*3
.99999999999999999999

"Правильно" бывает только относительно заданной точности.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Изящно :)

Но это понятно, хорошо и даже на это я согласен. Одна треть, ничего не поделаешь, это не десятичная дробь, а умножение и деление - это очень сложные операции...

Но питон-то - на складывании и вычитании обламывается!

sin_a ★★★★★
() автор топика
Ответ на: комментарий от DonkeyHot

>(1/3)*3 .99999999999999999999

Вроде как 0.(9) считается всегда равным 1 (не округляется, а именно равно), так что с этой точки зрения там ошибки нет, просто другая форма записи единицы.

kss ★★★★★
()
Ответ на: комментарий от kss

>> (1/3)*3 .99999999999999999999

> Вроде как 0.(9) считается всегда равным 1 (не округляется, а именно равно), так что с этой точки зрения там ошибки нет, просто другая форма записи единицы.


Ты путаешь 0.(9) и 0.99999999999999999999(0).

gaa ★★
()
Ответ на: комментарий от soomrack

>Все линейкой измеряют, а он штангелем

Линейкой измеряют длину, штангенциркулем - толщину

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от sin_a

>Но питон-то - на складывании и вычитании обламывается!

Все претезнии - к архитекторам FPU, либо переключи в целочисленный режим (и наблюдай 0.99999999999)

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от sin_a

>Но питон-то - на складывании и вычитании обламывается!

Просто ты редко вводишь в bc непредставимые конечной длинны дробями числа. 9.63, к примеру, есть 0.100111(01010001111010111000)e4. Попробуй введи такое в bc, и поскладывай.

А вообще, нас учили не смотреть на цифры результата "более точные", чем входные значения. Т.ч. с этой т.з. python не очень хороший калькулятор, т.к. не вычисляет автомагически потенциальную точность рез-та и не округляет туда. bc, как мы видели, тоже. Т.ч. они оба плохи.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

echo "program calc; begin writeln((1/3)*3) end." > calc.pas && fpc calc.pas && ./calc && rm -i calc*
Free Pascal Compiler version 2.2.2 [2008/12/22] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Linux for i386
Compiling calc.pas
Linking calc
1 lines compiled, 0.2 sec 
 1.0000000000000000E+0000
rm: удалить обычный файл `calc'? y
rm: удалить обычный файл `calc.o'? y
rm: удалить обычный файл `calc.pas'? y

record ★★★★★
()
Ответ на: комментарий от sin_a

>Но это понятно, хорошо и даже на это я согласен. Одна треть, ничего не поделаешь, это не десятичная дробь, а умножение и деление - это очень сложные операции...

CL-USER> (/ 1 3)
1/3
CL-USER> (* (/ 1 3) 3)
1
CL-USER> (* (/ 1 3) 3)
1
CL-USER> (* (/ 1 3.0) 3)
1.0
CL-USER> (/ 1 3.0)
0.33333334

Объясните, что я не так делаю? Ведь специально указал десятичную дробь.

ZloySergant
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.