имена плавающих типов, совпадающие с именами целочисленных типов? - PullRequest
3 голосов
/ 26 февраля 2010

Должен сказать, что мне было приятно, когда я открыл c # и увидел, что целочисленные типы данных Int16,Int32 and Int64. Это убрало любую неопределенность, например, увеличение размера с возрастом.

Что меня удивляет, так это то, почему нет или не кажется Float16,Float32 and Float64 или, по крайней мере, не при обычном использовании: быстрый поиск по MSDN ссылается на float64 как R8 (неуправляемый тип), это не то же самое, что двойной

Полагаю, не так много двусмысленности в Single и Double (или даже Extended (Float80), которого нет в c #, насколько я знаю, я не уверен, как это можно упорядочить для этого вопрос.) Хотя десятичная дробь, кажется, является Float128, и я отметил, что она упоминается как «Расширенная точность с плавающей точкой», Должны ли мы видеть Int128, чтобы соответствовать ему?
РЕДАКТИРОВАТЬ: В Single или Double нет никакой двусмысленности (это было предположение, но, похоже, это правда, и я решил добавить это для ясности.)

Стоит ли ожидать такого соглашения об именах? / Вы бы оценили его, если бы мы это сделали?

Или мы должны пойти еще дальше и иметь Int<N> для произвольных чисел? (да, я понимаю, что есть библиотеки, которые поддерживают такие вещи)

Ответы [ 2 ]

1 голос
/ 26 февраля 2010

Что ж, здесь можно рассмотреть различные вещи:

  • Типы, предоставляемые .NET
    • Что доступно
    • Как называется каждый тип
  • Что заканчивает тем, что имело псевдонимы другими языками, например C # с использованием int означает System.Int32

Лично я бы предпочел Float32 и Float64 в качестве типов CLR. Я, конечно, вижу некоторую путаницу в F #, называя типы «float» (для System.Double) и «float32» (для System.Single). Я бы не хотел, чтобы Decimal называли Float128; возможно Decimal128, чтобы учесть другие подобные типы.

Обратите внимание, что Byte, кстати, не UInt8 - возможно потому, что байты обычно используются для произвольного двоичного хранения, а не для действительно числовых величин.

Я не думаю, что есть большая причина иметь произвольные значения для Int<N>. По крайней мере, я подозреваю, что использование достаточно специализировано, чтобы передать его в пользовательскую библиотеку классов, а не делать ее частью платформы. (Обратите внимание, что BigInteger является частью .NET 4.0.)

0 голосов
/ 26 февраля 2010

Ну, в C # это float и double, вместо single и double, но это та же самая общая разница.Имейте в виду, что в C # есть псевдоним для каждого встроенного типа .Что касается произвольных размеров чисел, F # представляет BigInteger, который должен об этом позаботиться, но произвольный размер при указании числа рациональных чисел, которые может содержать целое число, скорее всего, будет падать в производительность, поскольку встроенные типы все хорошонастроен на производительность в CLR.

Кроме того, десятичная дробь не является типом с плавающей запятой в смысле IEEE.Конечно, это высокоточный тип, который допускает использование плавающей десятичной точки, но это не «тип с плавающей запятой» в смысле IEEE.Помимо ограниченной точности, он не будет делать странные вещи, которые будет делать float (например, 2x2 = 3.9999999999999), и по этой причине его часто используют в финансовых расчетах.

Если вы действительно ищете что-то, что позволит вам сильно сокращать числа, вы можете обратиться к функциональному языку, например, F # вместо C #.Функциональные языки, как правило, лучше справляются со сложными числами ... они, как правило, более лаконичны.

Что касается соглашения об именах ... Я начал на C # ... C # - мой стандарт, и поэтому для меня другие языки странные.Я полагаю, все зависит от того, откуда взялся разработчик.

...