Нет, Math.Log () использует функцию библиотеки языка C (), чтобы выполнить свою работу. log1p () фактически включен в библиотеку CRT, которую использует CLR, но он не предоставляется через платформу. Это можно исправить с помощью объявления pinvoke:
using System;
using System.Runtime.InteropServices;
public static class Math {
public static double Log1p(double arg) {
if (arg < -1.0) throw new ArgumentException();
return log1p(arg);
}
[DllImport("msvcr120_clr0400.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern double log1p(double arg);
}
Если вам нужно настроить таргетинг на версию .NET менее 4.0, подумайте об изменении объявления DllImport на использование «ucrtbase.dll».
Возможно, примечательно, что я не смог получить согласованное представление об этом коде. Нацелившись на x64 и на C #, и на C на своем ноутбуке, я получил ~ 140 наносекунд за звонок. Но увидел большую разницу при таргетинге на x86, 225 против 40. Большая разница, у меня нет хорошего объяснения этому.