Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2012 15:05:16

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

точность вычислений

Андрей Светлов
В numpy нет float128 потому что он собран без поддержки этого типа.
MSVC, которым на Windows по умолчанию собирается Питон (и третьесторонние расширения) поддержки float128 не имеет — соответственно и numpy тоже оказывается обделенным.

Отсутствие поддержки проявляется именно как отсутствие атрибута `float128` модуля `numpy`.

если набрать
dir(numpy)
то действительно можно увидеть отсутствие float128, как в windows, так и в ubuntu. то есть дело не в ОС. зато можно увидеть тип данных longdouble

1. откуда можно взять float128 (windows, ubuntu)?

2. в numpy есть тип longdouble, который вроде как должен давать более точное представление, но тем не менее даёт всё то же 64 битное представление числа. вопрос: что необходимо, чтобы тип данных longdouble в питоне работал на полную катушку?



Офлайн

#2 Май 17, 2012 21:27:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

точность вычислений

У меня в 64битнной Убунте 12.04 float128 есть по умолчанию. К чему бы это?



Офлайн

#3 Май 18, 2012 18:08:08

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

точность вычислений

Андрей, вот это хорошо.)
Я себе убунту поставил 32бит, там точно нет. Попробуем Ubuntu 64 bit, спасибо.

по умолчанию используется float64, как сделать так, чтобы во всем файле переменные были другого типа (float32 или float128, например)?



Отредактировано eiyawii (Май 19, 2012 09:56:54)

Офлайн

#4 Май 19, 2012 12:01:05

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

точность вычислений

Вероятно, вы несколько запутались. Желаете использовать float128 — пишите это явно. По умолчанию всё равно останется float64.



Офлайн

#5 Май 19, 2012 14:12:48

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

точность вычислений


Андрей Светлов
Вероятно, вы несколько запутались. Желаете использовать float128 — пишите это явно. По умолчанию всё равно останется float64.

хорошо , буду явно переводить переменные в float128.

Поставил ubuntu 12.04 64 bit, установил numpy - в директории numpy действительно есть float128, но он работает не как я ожидал. по идее 112 бит после запятой отводится, а это примерно 34 десятичных знака. в терминале выдаёт вот что:
>>> float128(0.123456789012345678901234567890)
0.12345678901234567737
почему только 20 знаков и с таким кривым округлением?



Офлайн

#6 Май 19, 2012 14:20:59

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

точность вычислений

Потому что вы создаете numpy.float128 из стандартного float, который 64-битный.



Офлайн

#7 Май 19, 2012 14:34:05

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

точность вычислений

Андрей Светлов
Потому что вы создаете numpy.float128 из стандартного float, который 64-битный.
как мне создать полноценный float128 в котором 34 десятичных разряда после запятой?

upd
>>> from numpy import float128 as f128
>>> f128(1/3.)
0.33333333333333331483
>>> f128(1/f128(3))
0.33333333333333333334



Отредактировано eiyawii (Май 19, 2012 14:55:45)

Офлайн

#8 Май 19, 2012 15:17:27

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

точность вычислений

Сами видите: задать нельзя, вычислить — можно.



Офлайн

#9 Май 19, 2012 15:57:53

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

точность вычислений

Андрей Светлов
Сами видите: задать нельзя, вычислить — можно.
не вижу, почему 20 десятичных знаков, а не 34 обещанных?



Отредактировано eiyawii (Май 19, 2012 15:58:22)

Офлайн

#10 Май 19, 2012 16:24:44

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

точность вычислений

Есть там ваши биты, не переживайте. В вычислениях присутствуют.

In [31]: bytearray(numpy.float64(1))
Out[31]: bytearray(b'\x00\x00\x00\x00\x00\x00\xf0?')

In [32]: bytearray(numpy.float128(1))
Out[32]: bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x80\xff?\x00\x00\x00\x00\x00\x00')



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version