Страниц: 1 ... 3 4 [5] 6
  Печать  
Автор Тема: long double  (Прочитано 38155 раз)
oder
Гость
« Ответ #60 : Октября 28, 2009, 10:32:58 pm »

Грабли в том, что результат в большинстве нетривиальных операций будет иметь недопустимо меньше верных бит мантисы, нежели имели аргументы (а считается, что аргументы точные). Таким образом, при кажущейся "повышенной точности" данного типа, при использовании его как основного и единственного типа вычислений, точность результата будет не лучше (а, возможно, и хуже), чем если бы мы использовали double.
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #61 : Октября 28, 2009, 10:35:27 pm »

Мне кажется или мы по кругу ходим ?
Записан

oder
Гость
« Ответ #62 : Октября 28, 2009, 10:40:17 pm »

Ну а чего ещё следовало бы ожидать? Smiley
Как говорит классика: "Гермес Конрад, Вы фактически правы, а это - лучший вид правоты!"
« Последнее редактирование: Октября 28, 2009, 10:42:27 pm от oder » Записан
oder
Гость
« Ответ #63 : Октября 28, 2009, 10:45:17 pm »

Я не отрицаю типа long double как понятия. Он возможен и даже кое-где реализован. Но так, как он реализован для большинства платформ, его использовать для вычислений категорически нельзя.
Записан
Dukales
Jr. Member
**
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #64 : Октября 28, 2009, 10:45:41 pm »

Грабли в том, что результат в большинстве нетривиальных операций будет иметь недопустимо меньше верных бит мантисы, нежели имели аргументы (а считается, что аргументы точные). Таким образом, при кажущейся "повышенной точности" данного типа, при использовании его как основного и единственного типа вычислений, точность результата будет не лучше (а, возможно, и хуже), чем если бы мы использовали double.
не верно. Если входные данные даются с некоторой точностью, меньшей чем формата представления double, то мы никак не превысим эту точность. Для extended, то это тоже верно.
Приведите пример физического эксперимента, где формат представления действительных чисел имел бы столько же значащих цифр, сколько обеспечивает длина мантиссы extended? Так что для неабстрактных задач точность будет на предсказуемом уровне.
« Последнее редактирование: Октября 29, 2009, 01:16:20 am от Dukales » Записан

Это предложение содержит двенадцать слов, двадцать шесть слогов и семьдесят три буквы
oder
Гость
« Ответ #65 : Октября 28, 2009, 10:50:19 pm »

не верно. Если входные данные даются с некоторой точностью, меньшей чем формата представления double, то мы никак не превысим эту точность. Для extended это то же верно.
Для extended мы и её можем ухудшить!

Приведите пример физического эксперимента, где формат представления действительных чисел имел бы столько же значащих цифр, сколько обеспечивает длина мантиссы extended? Так что для неабстрактных задач точность будет на предсказуемом уровне.
Вы совсем не понимаете, о чем я вам говорю. Sad
Записан
Dukales
Jr. Member
**
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #66 : Октября 28, 2009, 10:51:52 pm »

посмотрел кстати. "%f" действительно эквивалентно "%lf" со стороны scanf. float перед push-м на стек действительно расширяется до double, а вот extended - двумя байтами нулей, но не округляется до double. Это видимо верно для необязательных параметров функций.
Записан

Это предложение содержит двенадцать слов, двадцать шесть слогов и семьдесят три буквы
oder
Гость
« Ответ #67 : Октября 28, 2009, 10:54:56 pm »

посмотрел кстати. "%f" действительно эквивалентно "%lf" со стороны scanf. float перед push-м на стек действительно расширяется до double, а вот extended - двумя байтами нулей, но не округляется до double. Это видимо верно для необязательных параметров функций.
Попробуйте свою функцию, а не printf. Хитрый GCC умеет разбирать типы параметров к ней. Возможно, это его проделки.
Записан
Dukales
Jr. Member
**
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #68 : Октября 28, 2009, 11:02:22 pm »

Приведите пример физического эксперимента, где формат представления действительных чисел имел бы столько же значащих цифр, сколько обеспечивает длина мантиссы extended? Так что для неабстрактных задач точность будет на предсказуемом уровне.
Вы совсем не понимаете, о чем я вам говорю. Sad
я понимаю. но вы никак в толк не берёте то, что могут существовать промежуточные параметры, точные значения которых могут нас интересовать.
А в процитированных вами предложениях я говорю лишь о том, что ситуация, когда вы имеете данные с 17 значащими цифрами - нереальна для реальных задач. Поэтому, когда я пишу, задавая условия реальной физической задачи, long double x = 1.2; то я не имею ввиду, что x == 1.2000000000000000. Для довольно сложной формулы (например, где умножается подряд 65 extended чисел) даже формата extended не будет достаточно для промежуточного представления числа, чтобы точность сохранилась хотя в одном значащем разряде.
Записан

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

Сообщений: 64


Просмотр профиля
« Ответ #69 : Октября 28, 2009, 11:05:40 pm »

Попробуйте свою функцию, а не printf. Хитрый GCC умеет разбирать типы параметров к ней. Возможно, это его проделки.
при вызове своей функции наблюдается то же самое
Записан

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

Сообщений: 739


Просмотр профиля WWW
« Ответ #70 : Октября 29, 2009, 06:21:48 am »

Вот в том то и дело, что нужно, чтоб либо была полноценная поддержка для всех операций с long double, либо эти неподдерживаемые операции надо запретить. А так - грабли, о которых большинство даже не подозревает.
Какие грабли? Если все же идет речь о языке С99, то стандарт описывает все заголовки и обьявленные макро, которые дадут четкое представление о том, как имплементирована поддержка плавающей запятой. Никакого загрубления точности (если это имеется ввиду под граблями) быть не может, при вычислениях расширение до более точного типа вполне допустимо.
Цитата: ISO/IEC 9899:1999 (E)
The values of operations with floating operands and values subject to the usual arithmetic
conversions and of floating constants are evaluated to a format whose range and precision
may be greater than required by the type. The use of evaluation formats is characterized
by the implementation-defined value of FLT_EVAL_METHOD:
-1 indeterminable;
0 evaluate all operations and constants just to the range and precision of the
type;
1 evaluate operations and constants of type float and double to the
range and precision of the double type, evaluate long double
operations and constants to the range and precision of the long double
type;
2 evaluate all operations and constants to the range and precision of the
long double type.
Только я не очень понимаю, о чем спор. Прошу извинить если не в тему. Изначально говорили про спецификатор формата %f, который подразумевает double аргумент. Ну так это любой программист (а не wannabe C programer) знает. Ведь не станете же вы уверять, что спецификатор формата %c ожидает аргумент типа чарактер Smiley (правильный ответ - тип аргумента int)
 
Записан
Dukales
Jr. Member
**
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #71 : Октября 29, 2009, 11:10:05 am »

Только я не очень понимаю, о чем спор. Прошу извинить если не в тему. Изначально говорили про спецификатор формата %f, который подразумевает double аргумент. Ну так это любой программист (а не wannabe C programer) знает. Ведь не станете же вы уверять, что спецификатор формата %c ожидает аргумент типа чарактер Smiley (правильный ответ - тип аргумента int)
ну до 4 байт расширение - это очевидно, просто push такой. А с float до double - не очевидно. А стандарты читать лень (значит я wannabe, а не true) не только мне.
Записан

Это предложение содержит двенадцать слов, двадцать шесть слогов и семьдесят три буквы
@nger
Гость
« Ответ #72 : Октября 29, 2009, 11:17:30 am »

Цитировать
А стандарты читать лень

Думаю это логичное завершение темы.
Записан
Dukales
Jr. Member
**
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #73 : Октября 29, 2009, 11:35:19 am »

Цитировать
А стандарты читать лень

Думаю это логичное завершение темы.
Согласен. Wink
« Последнее редактирование: Октября 29, 2009, 11:42:02 am от Dukales » Записан

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

Сообщений: 64


Просмотр профиля
« Ответ #74 : Октября 29, 2009, 10:32:29 pm »

Как бы выиграли его тексты, если бы он поменьше философствовал!
Интересный тренд наблюдается в программистской (а может не только?) литературе: от четкого изложения идей, задач и решений к занудному мутному умствованию вокруг да около каких-то смутных ощущений.
философию сдают, когда сдают кандидатский минимум даже на физмат и технические науки (хотя почему "даже"?)
Записан

Это предложение содержит двенадцать слов, двадцать шесть слогов и семьдесят три буквы
Страниц: 1 ... 3 4 [5] 6
  Печать  
 
Перейти в: