C# 的 decimal 类型在 C++ 中的等价物是什么?

What's the C++ equivalent of C#'s decimal type?

我喜欢 decimal 在我的许多 C# 程序中,我想在其他 C 语言中尝试它。

我用 C# 写了这段代码:

using System;

decimal get_pi();

int main() {
    Console.WriteLine("Give a number ranging from 1-100: ");
    decimal num = Console.ReadLine();
    Console.Write("Algebraic Equivalent: ");
    if (num >= get_pi()) {
        Console.WriteLine("π");
    } else {
        Console.WriteLine(num);
    }
    // Currently updating the program for giving algebraic equivalents
}

我想用 C++ 重写它。

我意识到在 C 和 C++ 中,它们都没有与 decimal 类型完全等价的类型,您可以使用的最好的是 double,但实际上有一个受支持的 decimal 在 C 中输入(基于 Is there a C equivalent of C#'s decimal type?),这让我很好奇 C++ 中是否也有等效项。

在 C++ 中是否有任何 C# decimal 类型等效或者 double 是最佳选择?

没有,但我相信那里有提案。

但是如果您导航到 IBM Fellow Mike Cowlishaw's page General Decimal Arithmetic,您将

  • 了解关于该主题的更多信息 — 他几乎编写了十进制浮点数的 IEEE 754 规范 — 并且
  • 得到一个link到ANSI C implementation

就其价值而言,.Net 源代码是 open-source 并且在 Github 上。如果你想将 System.Decimal 从 C# 移植到 C++,你可以从这里开始:

C# 的 decimal 类型实际上只是一个所谓的 任意精度 浮点数 arbitrary 换出一个固定的值,可以在其 source (already linked by 中查找)。它是 28 位有效数字。

至少 C++20 的标准库中没有包含任意精度浮点数,但是有相当多的库包含该功能。 C# 的 decimal 也是 .NET 的一部分,严格来说它也是一个 而不是语言本身的一部分(但耦合非常紧密)。

支持 C++ 任意精度浮点数的库示例包括: