LINUX.ORG.RU

Python округляет число ПИ до 3 целых.

 ,


1

2

Пишу:

import math
print math.pi
Ответ:
3
Python 2.6.6
Может и правда, было бы лучше договориться и приравнять число ПИ к трем целым для простоты вычислений?



Последнее исправление: qumo (всего исправлений: 3)

Ответ на: комментарий от qumo
Python 2.6.6 (r266:84292, Aug 28 2012, 10:55:56) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> print math.pi
3.14159265359
>>> 

ЧЯДНТ?

yvv ★★☆
()

8)

$ cat ~/.pythonrc 
import math
math.pi = 3

$ export PYTHONSTARTUP=~/.pythonrc

$ python
Python 2.7.3 (default, Aug  9 2012, 17:23:57) 
[GCC 4.7.1 20120720 (Red Hat 4.7.1-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> print math.pi
3
>>> print type(math.pi)
<type 'int'>
>>> 
Deleted
()
Ответ на: 8) от Deleted

Не все так просто. У него плавающее деление тоже возвращает целое.

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

Блжад, долбанная розовая поняшка, чтоб ты сдохла в корчах, чтоб у тебя эти елочки в жопе росли.

Надо вот так:

python2 -sSEv -c "import sys; print sys.float_info"

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

Не все так просто. У него плавающее деление тоже возвращает целое.

Ну тогда у меня остаётся всего две версии:

  • автор темы намеренно поломал себе пайтон (путём правки исходников) или
  • пайтон поломали рукожопые мейнтейнеры дистрибутива.
Deleted
()
Ответ на: комментарий от init_6

Повторяю ответ: чтобы интерпретатор/разработчик интерпретатора/мэйнтейнер пакета не решали за меня, какой тип вывести. Как видно из треда, иногда на каком-то этапе может попасться неадекват.

imtw
()
Ответ на: комментарий от qumo

Подозреваю, неполоманный питон будет в любом, кроме твоего.

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

автор темы намеренно поломал себе пайтон (путём правки исходников) или
пайтон поломали рукожопые мейнтейнеры дистрибутива.

Больше нет вариантов? Старнно.

qumo
() автор топика
Python 2.7.2+ (default, Jul 20 2012, 22:12:53) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> print math.pi
3.14159265359
sorrymak-2
()
Ответ на: комментарий от qumo

Больше нет вариантов? Старнно.

Третий вариант: автор темы несмешно шутит 8).

Deleted
()
Ответ на: комментарий от imtw

Повторяю ответ: чтобы интерпретатор/разработчик интерпретатора/мэйнтейнер пакета не решали за меня, какой тип вывести. Как видно из треда, иногда на каком-то этапе может попасться неадекват.

Повторяю вопрос зачем нужно идиотское управление типами в языке с динамической типизацией?

init_6 ★★★★★
()
ilya@ilya-ThinkPad-Edge-E120:~/Документы/WebDevelop/Game$ ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
ilya@ilya-ThinkPad-Edge-E120:~/Документы/WebDevelop/Game$ irb
irb(main):001:0> Ma
Marshal    MatchData  Math       
irb(main):001:0> Math::PI
=> 3.141592653589793
irb(main):002:0> 

В руби всё ок. Меняй язык.

blan4
()
Ответ на: комментарий от init_6

Раз в год нужно всем лоровцам устраивать экзамен на умение читать. Проваливших отправлять в первый класс.

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

Раз в год нужно всем лоровцам устраивать экзамен на умение читать.

И на умение писать. Что такое «выбор типа»?

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

А в питоне можно как-то управлять выбором типа?

Что ты подразумеваешь под управлением выбором типа?

Deleted
()
Ответ на: комментарий от imtw

какой тип вывести

Что непонятно?

Непонятно слово «вывести». Имеется в виду infer (как в type inference), или output. Если первое - то, внезапно, вывода типов в Питоне нет.

tailgunner ★★★★★
()

Python 2.6.6

Попробуй math.pi.real

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

Числовая константа - вещь полиморфная. Число 12 может целым, длинным целым, фиксированным, двойной или одинарной точности. И это важно для разных задач. Как можно повлиять на тип этой константы 12?

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

Число 12 может целым, длинным целым, фиксированным, двойной или одинарной точности.

В твоем понимании - возможно. В Python оно имеет тип int.

Как можно повлиять на тип этой константы 12?

(пожимая плечами) Я так понимаю, ты таки говорил о выводе типов. Его в Python нет, так что твой вопрос бессмысленен.

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

Числовая константа - вещь полиморфная. Число 12 может целым, длинным целым, фиксированным, двойной или одинарной точности. И это важно для разных задач. Как можно повлиять на тип этой константы 12?

>>> type(12)
<type 'int'>
>>> type(12.)
<type 'float'>

В каком-нибудь C/C++ всё почти также (отличие - типы могут быть разного размера).

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Его в Python нет, так что твой вопрос бессмысленен.

Ну по каким правилам будут операции-то производиться? Например у меня есть два достаточно больших числа. "Умный" интерпретатор их сделает int'ами (сишный long). Я их сложу и, вероятно, получу переполнение. Как быть?

imtw
()
Ответ на: комментарий от Deleted

В каком-нибудь C/C++ всё почти также

Компилятор сам будет думать, только если я напишу auto x = 12. И то не помню, можно ли так.

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

Например у меня есть два достаточно больших числа. «Умный» интерпретатор их сделает int'ами

Не сделает.

Ну по каким правилам будут операции-то производиться?

Если тебе лень читать документацию, запусти хотя бы интерпретатор:

>>> a = 12345678
>>> b = 123456789
>>> a * b
1524157763907942L
>>> a / b
0
>>> c = 123456789123456789
>>> type(c)
<type 'long'>
>>> 

Это Python 2.x на 32-бит системе.

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

Компилятор сам будет думать, только если я напишу auto x = 12. И то не помню, можно ли так.

Компилятор ничего думать не будет. «12» имеет совершенно определённый тип - int. И даже если ты напишешь

double x = 12;
, «12» всё равно будет типа int.

Deleted
()

Пишу:

import math
print math.pi

Ответ:

          HOUSTON, WE'VE HAD A PROBLEM   
                                         
                                         
        _..._     /                      
      .'     '.  /    _                  
     /    .-""-\   _/ \                  
   .-|   /:.   |  |   |                  
   |  \  |:.   /.-'-./                   
   | .-'-;:__.'    =/                    
   .'=  *=|NASA _.='                     
  /   _.  |    ;                         
 ;-.-'|    \   |                         
/   | \    _\  _\                        
\__/'._;.  ==' ==\                       
         \    \   |                      
         /    /   /                      
         /-._/-._/                       
  jgs    \   `\  \                       
          `-._/._/                       

Tark ★★
()

Archlinux - самый стабильный!

Python 3.3.0 (default, Dec 22 2012, 21:14:17) 
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.pi
3.141592653589793


Python 2.7.3 (default, Dec 22 2012, 21:27:36) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.pi
3.141592653589793

bastardfromhell
()
Ответ на: комментарий от imtw

Будет вообще-то как-то так: A x = (A) 12;

Это не отменяет факт, что 12 - int.

И кстати, то, что ты только что написал - это то самое «додумывание компилятором», которое тебе так не нравится 8).

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Ок, я уже посмотрел: при всех математических операциях происходит проверка на переполнение и изменение типа если что. Поэтому питон никогда не станет быстрым, кстати.

imtw
()

я скорее всего не прав, но не собран ли у тебя питон с fastt-math?

Deneb
()
Ответ на: комментарий от Deleted

Ты почти его раскусил, только версией этого благеноса ошибся.

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

Поэтому питон никогда не станет быстрым, кстати.

AFAIK, все вычисления, требующие скорости, на процессорах общего назначения выполняются с числами с плавающей точкой. Так что если Python и не станет быстрым, то не из-за проверки на переполнение.

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

Это не отменяет факт, что x в «double x = 12» - это double

Double'ом у тебя будет только переменная. «12» всё так же остаётся int'ом =).

и все операции с ним будут проделываться как с double.

В python'е тоже с переменной конкретного типа все операции будут проделываться именно как с переменной конкретно вот этого вот типа. Без исключений.

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

с переменной конкретного типа

Я уже посмотрел: в питоне типы переменных столь же конкретны, как и кот Шрёдингера.

Double'ом у тебя будет только переменная.

Мне этого достаточно.

imtw
()
Ответ на: комментарий от Deleted

Дополню...

Вот такой код на пайтоне:

a = a + b
в некотором смысле является эквивалентом такого кода на C++:
auto a_new = a + b;
То есть в пайтоне «тип переменной» можно изменить. Это не отменяет строгую типизацию, просто она в пайтоне динамическая, а не статическая как в C/C++.

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