Почему бы не выполнить побитовое XOR? Два числа с плавающей запятой равны, если их соответствующие биты равны. Я думаю, было принято решение разместить экспоненциальные биты перед мантиссой, чтобы ускорить сравнение двух поплавков. Я думаю, многие ответы здесь не имеют смысла в сравнении с epsilon. Значение Epsilon зависит только от того, какая точность чисел с плавающей запятой сравнивается. Например, после выполнения некоторой арифметики с поплавками вы получаете два номера: 2.5642943554342 и 2.5642943554345. Они не равны, но для решения важны только 3 десятичных знака, поэтому они равны: 2.564 и 2.564. В этом случае вы выбираете epsilon равным 0,001. Сравнение Epsilon также возможно с побитовым XOR. Исправьте меня, если я ошибаюсь.
Если вы не возражаете, чтобы провалиться в реестре, взгляните на
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts
Он имеет пары, такие как
Name = "Arial (TrueType)"
Data = "arial.ttf"
. Вы можете сделать это необходимые запросы например:
static RegistryKey fontsKey =
Registry.LocalMachine.OpenSubKey(
@"Software\Microsoft\Windows NT\CurrentVersion\Fonts");
static public string GetFontFile(string fontName)
{
return fontsKey.GetValue(fontName, string.Empty) as string;
}
Вызов GetFontFile("Arial (TrueType)")
возвращает "arial.ttf"
Вы, конечно, можете изменить код, чтобы добавить (TrueType)
часть в fontName
, или просмотреть все, что было возвращено fontsKey.GetValueNames()
, чтобы найти наилучшее соответствие.