OSDev http://osdev.su/ |
|
Real или Float? http://osdev.su/viewtopic.php?f=30&t=1064 |
Страница 1 из 2 |
Автор: | Freeman [ 10 мар 2015, 12:41 ] |
Заголовок сообщения: | Real или Float? |
Возник вопрос, как правильней назвать семейство типов с плавающей запятой, -- с использованием слова Real (действительное) или Float (плавающее)? Исторически сложилось, что в Паскале числа с плавающей запятой обозначаются словом Real, а в Си -- Float. Это разная терминология, предпочтения разработчиков (вкусовщина), разность мышления, особенности английского языка по разные стороны Атлантики? Как, с вашей точки зрения будет правильней назвать семейство типов в языке:
На данный момент в языке уже есть типы Integer[n] и Word[n], плюс соответствующие им (ByteInt, ShortInt, LongInt, QuadInt) и (Byte, ShortWord, LongWord и QuadWord). |
Автор: | Zealint [ 10 мар 2015, 19:54 ] |
Заголовок сообщения: | Re: Real или Float? |
Я с присущей мне категоричностью считаю единственно правильным вариант Real[n]. А "поплавок" (float) мне никогда не нравился. И я против всяких косвенных указаний на длину типа (short, long, суперLong и прочее), нужно чётко указывать размер типа без каких-либо затем изменений (вроде тех, что int было словом, а стал двойным словом, а у кого-то даже четверным). Таково моё личное субъективное мнение. |
Автор: | Freeman [ 10 мар 2015, 22:13 ] |
Заголовок сообщения: | Re: Real или Float? |
Zealint писал(а): Я с присущей мне категоричностью считаю единственно правильным вариант Real[n]. А "поплавок" (float) мне никогда не нравился. Я задал такжевопрос на "Тостере", и там меня навели на правильные мысли. Поскольку Кантор ориентируется на системное программирование, нужно быть ближе к машине, иначе тебя не поймут. На данный момент рабочая гипотеза -- это FloatingPoint для общего типа и SingleFloat, DoubleFloat и ExtendedFloat -- для конкретных сопроцессорных типов. В именах конкретных типов "Float" -- такое же сокращение, как и "Int" в целых. Zealint писал(а): И я против всяких косвенных указаний на длину типа (short, long, суперLong и прочее), нужно чётко указывать размер типа без каких-либо затем изменений (вроде тех, что int было словом, а стал двойным словом, а у кого-то даже четверным). Символьные имена проще в наборе на клаве, да и визуально смотрятся лучше. Их размерность меняться не будет. Именами можно и не пользоваться, можно каждый раз указывать размерность, раскрывая обобщение вручную. С точки зрения Кантора Integer[32] и LongInt эквивалентны, поскольку LongInt описан как Integer[32] в самом Канторе, а раскрытие обобщений -- это вызовы высших функций. |
Автор: | pavia [ 11 мар 2015, 06:26 ] |
Заголовок сообщения: | Re: Real или Float? |
Цитата: Возник вопрос, как правильней назвать семейство типов с плавающей запятой, -- с использованием слова Real (действительное) или Float (плавающее)? Исторически сложилось, что в Паскале числа с плавающей запятой обозначаются словом Real, а в Си -- Float. Си разрабатывался приближенный к железу. Его даже высокоурожайным ассемблером называют. Паскаль напротив использовал абстрактные типы. В нем нет плавучей точки в нем есть действительные числа без уточнения реализации. А она может быть и фиксированной и плавающей. А может и вовсе определять в виде формулы и вычислять только при выводе. После появился стандарт на действительные числа. В котором закреплены понятия float и double. И соответственно стандарт был прописан в Си. Цитата: Как, с вашей точки зрения будет правильней назвать семейство типов в языке: Real[n] и SingleReal, DoubleReal и ExtendedReal. Float[n] и SingleFloat, DoubleFloat и ExtendedFloat. За длинные слова разработчики вас побьют или не будут пользоваться вашем языком. Float[n] и Single, Double и Extended. |
Автор: | iz56 [ 11 мар 2015, 09:38 ] |
Заголовок сообщения: | Re: Real или Float? |
"Single" можно сократить до "S". Float[S] - SFloat,SingleFloat |
Автор: | dragon [ 11 мар 2015, 21:05 ] |
Заголовок сообщения: | Re: Real или Float? |
Вот мои 5 копеек: стандартные типы: Int, Int8, Int16, Int32, Int64, UInt, UInt8, UInt16, UInt32, UInt64, Float32, Float64, Float80, Single, Double. От Word, Long, Short, Small, Quad предлагаю отказаться. Использование ключевого слова Real достаточно странная затея, т.к. все вышеперечисленные типы также являютя подтипами Real. Название типа Real можно наверное как то с комплексными числами обыграть. Использование Word - слово, машинное слово. А какова длина машинного слова? Тут неоднозначность, соответственно отталкиваться от этого можно если только принять за аксиому тот хаос, который сложился вокруг размеров "слов" эмпирически (как минимум у меня в голове). Контрольный вопрос (риторический): чему полагаем равным размер слова (и почему) в 32-битном режиме x86 с 36-битной шиной адреса и 64-битной шиной данных? |
Автор: | Freeman [ 11 мар 2015, 21:54 ] |
Заголовок сообщения: | Re: Real или Float? |
Тема что-то расползлась, но всё же попробую ответить. Цифры в именах типов делают исходник нечитабельным и тяжело набираются на клаве. Уже говорил. Это справедливо для синтаксиса Кантора. Я проводил опыты и понял, что у самого глаза вытекают. Цифр не будет. Сочетание UInt придумали те, кто боится назвать слово словом. Смотрится ужасно. Я хочу вернуть слову его изначальный смысл. Единственная видимая мной альтернатива -- назвать абстрактное беззнаковое целое полным именем UnsignedInteger, от которого порождать Byte, ShortWord, LongWord и QuadWord. dragon писал(а): А какова длина машинного слова? Длина машинного слова -- размер арифметического регистра. В Канторе нет адресной арифметики, поэтому с этим однозначно. По поводу длины идентификаторов. Вы еще настоящей длины не видели. В Канторе всё распихано по пространствам, поэтому в прикладном коде типы будут выглядеть как Core:SingleFloat или Core:DoubleFloat. Такова организация ООП в Канторе. Из хорошего -- есть with в SQL-ном смысле (не путать с паскалевским). Уважаемый iz56 сможет написать так: Код: with S = Core:SingleFloat; class iz56 of var S maxVelocity = 0; end; То есть, как и в SQL, в Канторе всему можно дать локальный синоним, который потом использовать. Синоним ничего не стоит, он типа как макроподстановка, но контролируемая компилятором. Как в SQL, повторюсь. Типы придется указывать только в тех местах, где их и нужно указывать -- в объявлениях различной степени абстрактности. Во всех других случаях будет работать вывод типов. Пример: Код: Core:LongWord two = 2;
three = two + 1; // тоже имеет тип Core:LongWord |
Автор: | Freeman [ 11 мар 2015, 22:01 ] |
Заголовок сообщения: | Re: Real или Float? |
Да, самое главное забыл! pavia писал(а): Паскаль напротив использовал абстрактные типы. В нем нет плавучей точки в нем есть действительные числа без уточнения реализации. А она может быть и фиксированной и плавающей. А может и вовсе определять в виде формулы и вычислять только при выводе. Чёрт возьми! Вот наложить шкалу времени разработку Паскаля и Си и появления стандарта IEEE 754 я не догадался! Тогда всё сходится. Типы в Си контролируются внешним стандартом, как и положено в системном программировании. В Канторе будет аналогично. Unicode есть, SGML есть, теперь еще IEEE 754 до кучи. В интерфейсе будут стандарты W3C, с этим тоже решено. |
Автор: | scuter [ 11 мар 2015, 23:17 ] |
Заголовок сообщения: | Re: Real или Float? |
назови fpu. |
Автор: | dragon [ 13 мар 2015, 12:18 ] |
Заголовок сообщения: | Re: Real или Float? |
UInt vs UnsignedInteger - это конечно же уже вкусовщина. Поскольку я использую UInt, в защиту скажу просто что это тупо быстрее набирается, и это основной аргумент для меня. Впрочем всегда можно написать type UInt = UnsignedInteger и продолжать, что я успешно и сделал для паскаля. Интересен другой вопрос: Цитата: Длина машинного слова -- размер арифметического регистра. Отлично. Чему будет равен размер word на 8-битном процессоре? На 16-битном процессоре (или в 16-битном режиме x86)? Правильно ли я понимаю, QuadWord на 8-битном процессоре будет 32 бит? Как мне задать тип беззнакового целого размерностью не менее 32 бит? Или может быть я каких то подходов к выбору типов не знаю, если у меня такие вопросы возникают? |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |