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++ 任意精度浮点数的库示例包括:
- GNU GMP https://gmplib.org/
- Boost 的多精度库 https://www.boost.org/doc/libs/1_73_0/libs/multiprecision/
- CLN 的
long float
https://ginac.de/CLN/
- Henrik Vestermark 的
float precision<N>
http://www.hvks.com/Numerical/arbitrary_precision.html <- 这个实际上包含一个打印 pi (to std::string
) 的示例,这似乎是你要找的东西
- 还有更多:Wikipedia list
我喜欢 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
至少 C++20 的标准库中没有包含任意精度浮点数,但是有相当多的库包含该功能。 C# 的 decimal
也是 .NET 库 的一部分,严格来说它也是一个 库 而不是语言本身的一部分(但耦合非常紧密)。
支持 C++ 任意精度浮点数的库示例包括:
- GNU GMP https://gmplib.org/
- Boost 的多精度库 https://www.boost.org/doc/libs/1_73_0/libs/multiprecision/
- CLN 的
long float
https://ginac.de/CLN/ - Henrik Vestermark 的
float precision<N>
http://www.hvks.com/Numerical/arbitrary_precision.html <- 这个实际上包含一个打印 pi (tostd::string
) 的示例,这似乎是你要找的东西 - 还有更多:Wikipedia list