我已经从事C/C++编程工作多年了。我也使用过其他几种编程语言,但没有一种内置分数数据类型。这里我不是指常规的十进制数据类型,如浮点型。我指的是具有以下形式的常规数学分数:
Nr/Dr(其中Dr≠0)
开发人员在实现此类数据类型时面临着哪些挑战?
开发人员在实现此类数据类型时面临的挑战是什么?
这不是因为它是一项挑战,而是因为在实践中它们并不那么有用。
无限精度有理数(即高精度小数)更加有用,但这意味着需要管理内存并使用智能算法来尽可能地提高性能。此时,您最好将功能实现为像GNU GMP和其它库一样的完整数学库,而不是内置类型。
内置数据类型往往是那些广泛使用的,且在底层架构上映射更加高效的数据类型。这不是一条硬性规定,但这是一个相当不错的经验法则。
小数数据类型则不然:它们本应是广泛有用的数据类型,但由于有限精度浮点类型已经足够满足99.9%的应用程序需求(如果您愿意也可以称为999/1000),并且由于具有硬件支持可以更有效地实现,并且因为它们代表了更广泛的数字域(即不仅仅是有理数运算),所以它们具有更少的理论和实际限制。
当存在特定应用需要超过浮点数据类型精度的任意精度有理数时,可以使用专门的库。但是在标准库中添加这些类型会浪费开发资源。
因此,从本质上讲,对于任何其他未被广泛实现为内置类型的专门数据类型,答案都是相同的。
float64
中具有从 1e-308
到 1e+308
的范围,而类似大小的有理数将被限制在从 2e-10
到 4e9
的范围内。 - Ruslan
float
不是十进制数据类型,它是以二进制实现的。事实上,它对于表示小数非常糟糕,例如1/10
没有精确的表示方式。 - Weather Vane