【问题标题】:What's the C++ equivalent of C#'s decimal type?C# 的十进制类型的 C++ 等价物是什么?
【发布时间】:2021-02-10 08:44:38
【问题描述】:

我喜欢在我的许多 C# 程序中使用decimal,我想在其他 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,但事实上在 C 中实际上支持 decimal 类型(基于在Is there a C equivalent of C#'s decimal type?) 上,我很好奇 C++ 中是否也有等价物。

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

【问题讨论】:

  • 那么不,没有直接的等价物 - 取决于使用情况。 long double 将“更接近”,具体取决于实现。 (这可能是一个扩展......)
  • c# 中的十进制是浮点十进制而不是浮点二进制类型。检查 c++ 中是否存在浮点十进制类型。这可能是等价的。
  • Boost 多精度具有可以使用的更高精度浮点类型:boost.org/doc/libs/1_72_0/libs/multiprecision/doc/html/…
  • @janzen C++ supports everything in C's math.h 包括 FLT_RADIX,因此兼容的实现可以有十进制 floatdouble

标签: c# c++ decimal


【解决方案1】:

没有,但我相信有一个提议。

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

  • 比你想知道的更多地了解这个主题 - 他几乎为十进制浮点编写了 IEEE 754 规范 - 并且
  • 获取指向它的ANSI C implementation 的链接

不管怎样,.Net 源代码是开源的并且在 Github 上。如果你想将 System.Decimal 从 C# 移植到 C++,你可以从这里开始:

【讨论】:

    【解决方案2】:

    C# 的decimal 类型实际上只是一个所谓的 任意精度 浮点型,其中 arbitrary 这个词换出了一个固定值,可以在它的 @ 中查找987654321@(已由that answer 链接)。它是 28 位有效数字。

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2016-07-26
      • 2012-09-11
      相关资源
      最近更新 更多