Страниц: 1 ... 4 5 [6]
  Печать  
Автор Тема: long double  (Прочитано 38159 раз)
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #75 : Октября 30, 2009, 03:25:38 am »

Какое это имеет отношение к Страуструпу? Ему кандидата тех наук ни один физмат не даст, если философию спихнет, то английский точно завалит. Шутка.

А вот про пуш/поп выше очевидности не усмотрел, ведь никто же не будет утверждать, что нельзя пуш/поп байта сделать. Да и полно реализаций Си где параметры передаются в регистрах (или поддерживается такая модель). Просто есть стандарт в котором расписаны очевидные и не очень очевидные требования, которые и определяют язык. Язык Си разрабатывался после разработки языка Би, х86 и винтела в те годы не было... А Страуструп гораздо позже подошел, и ему, судя по всему, язык Си не понравился, потому как он сходу начал его улучшать.

Записан
Dukales
Jr. Member
**
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #76 : Октября 30, 2009, 12:25:51 pm »

можно, но указатель уменьшится/увеличится на 4 (на x86 по крайней мере)
Записан

Это предложение содержит двенадцать слов, двадцать шесть слогов и семьдесят три буквы
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #77 : Октября 30, 2009, 06:01:57 pm »

можно, но указатель уменьшится/увеличится на 4 (на x86 по крайней мере)
Какой указатель? Если вы про регистр SP, то вы заблуждаетесь
Цитата: Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z
Decrements the stack pointer and then stores the source operand on the top of the stack. The address-size attribute of the stack segment determines the stack pointer size (16, 32 or 64 bits). The operand-size attribute of the current code segment determines the amount the stack pointer is decremented (2, 4 or 8 bytes).
И как раз на х86 пуш/поп байта сделать и нельзя. (х86 кстати подразумевает все процессоры 8086 и выше, процессоры 386 и ниже вполне себе еще используются). И если вы программируете на ассемблере, то читать описания от производителя процессора, нужно много раз и постоянно. Но конечно, читать описания инструкций процессора не барское дело. Да и не нужное, если вы программируете на Си. Если программируете на языке программирования высокого уровня, нужно читать стандарты или другие нормативные документы для выбранного языка. Если и это влом, то нужно выбрать язык как можно более высоко уровня или плохо документированный. Например, работая в Tcl или визуал бэйсике, довольно безопасно рассуждать, что происходит в регистрах процессора.

Записан
Dukales
Jr. Member
**
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #78 : Октября 30, 2009, 09:36:23 pm »

Какой указатель? Если вы про регистр SP, то вы заблуждаетесь
И как раз на х86 пуш/поп байта сделать и нельзя. (х86 кстати подразумевает все процессоры 8086 и выше, процессоры 386 и ниже вполне себе еще используются). И если вы программируете на ассемблере, то читать описания от производителя процессора, нужно много раз и постоянно. Но конечно, читать описания инструкций процессора не барское дело. Да и не нужное, если вы программируете на Си. Если программируете на языке программирования высокого уровня, нужно читать стандарты или другие нормативные документы для выбранного языка. Если и это влом, то нужно выбрать язык как можно более высоко уровня или плохо документированный. Например, работая в Tcl или визуал бэйсике, довольно безопасно рассуждать, что происходит в регистрах процессора.
действительно заблуждался. теперь прочитал. странно, но я был полностью уверен, что push word, push dword идентично делают на 4 декремент ESP. вот ведь...
и ещё думал, что push byte существует
« Последнее редактирование: Октября 30, 2009, 09:38:45 pm от Dukales » Записан

Это предложение содержит двенадцать слов, двадцать шесть слогов и семьдесят три буквы
Istr
Jr. Member
**
Offline Offline

Сообщений: 50


Просмотр профиля
« Ответ #79 : Ноября 22, 2010, 04:36:20 pm »

Доброго времени суток:) Столкнулся с проблемой когда хотел выяснить нормализованные пределы>0 для значений с плавающей точкой. С максимальным всё логично: после LDBL_MAX выскакивает inf.
C минимальным же -- проскочив LDBL_MIN с e-4932 на выход пошли значения с е-4933, е-4934... дошёл до е-4941.
Значит предельной константы минимального нормализованного положительного значения нет и оно зависит исключительно от аппаратной реализации? наличия места в стеке FPU?
 Можно ли каким-то боком использовать значения с е-4933 и меньше в вычислениях или всё будет обрезано по LDBL_MIN?
Cпасибо за внимание.
Записан
oder
Гость
« Ответ #80 : Ноября 22, 2010, 04:42:50 pm »

Доброго времени суток:) Столкнулся с проблемой когда хотел выяснить нормализованные пределы>0 для значений с плавающей точкой. С максимальным всё логично: после LDBL_MAX выскакивает inf.
C минимальным же -- проскочив LDBL_MIN с e-4932 на выход пошли значения с е-4933, е-4934... дошёл до е-4941.
Значит предельной константы минимального нормализованного положительного значения нет и оно зависит исключительно от аппаратной реализации? наличия места в стеке FPU?
 Можно ли каким-то боком использовать значения с е-4933 и меньше в вычислениях или всё будет обрезано по LDBL_MIN?
Cпасибо за внимание.
Наверное, мы имеем дело с т.н. "денормализированными числами". Когда процессор упирается в гранично малую экспоненту он ещё может сгенерировать немного меньший результат за счёт имеющихся у него 52 бит мантиссы. Соответственно, полезная битность мантиссы при этом падает и результат получается с меньшей точностью.
В зависимости от настроек контрольного слова сопроцессора, при получении денормализированного результата в вычислениях, имеются ыварианты: генерировать исключение, генерировать нолевой результат или генерировать само получвшееся денормализированное число, которое программист имеет право использовать на свой страх и риск.
« Последнее редактирование: Ноября 22, 2010, 06:08:47 pm от oder » Записан
Istr
Jr. Member
**
Offline Offline

Сообщений: 50


Просмотр профиля
« Ответ #81 : Ноября 22, 2010, 09:05:54 pm »

Наверное, мы имеем дело с т.н. "денормализированными числами". Когда процессор упирается в гранично малую экспоненту он ещё может сгенерировать немного меньший результат за счёт имеющихся у него 52 бит мантиссы. Соответственно, полезная битность мантиссы при этом падает и результат получается с меньшей точностью.
В зависимости от настроек контрольного слова сопроцессора, при получении денормализированного результата в вычислениях, имеются ыварианты: генерировать исключение, генерировать нолевой результат или генерировать само получвшееся денормализированное число
Логичное объяснение. Самое притягательное здесь конечно "имеются варианты"Smiley Я всегда подозревал что инженеры Интела не знают что хотят и от смены к смене получаются разные процессоры:) Вот одна смена и перезарядила матрицу чтобы регистры мантиссы для результата в меньшую сторону работали non-stop:)
Записан
Страниц: 1 ... 4 5 [6]
  Печать  
 
Перейти в: