- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
为什么 Decimal
数据类型没有 Epsilon
字段?
From the manual ,decimal
值的范围是 ±1.0 × 10e−28 到 ±7.9 × 10e28。
The description of Double.Epsilon
:
Represents the smallest positive
Double
value greater than zero
看来,Decimal
也有这样一个(非平凡的)值。但为什么它不容易访问?
我确实知道 +1.0 × 10e−28 恰好是大于零的最小正十进制值:
decimal Decimal_Epsilon = new decimal(1, 0, 0, false, 28); //1e-28m;
顺便说一句,有几个问题提供了有关 Decimal 数据类型的内部表示的信息:
这是一个 Epsilon
有用的例子。
假设我有来自某个采样集的值的加权总和以及所采集样本的权重(或计数)总和。现在我想计算加权平均值。但我知道权重之和(或计数)可能仍为零。为了防止被零除,我可以执行 if...else...
并检查零。或者我可以这样写:
T weighted_mean = weighted_sum / (weighted_count + T.Epsilon)
这段代码在我看来比较短。或者,我也可以跳过 + T.Epsilon
并改为初始化:
T weighted_count = T.Epsilon;
当我知道实际权重的值永远不会接近 Epsilon
时,我可以这样做。
对于某些数据类型和用例,这可能更快,因为它不涉及分支。据我了解,即使分支很短,处理器也无法将两个分支都用于计算。我可能知道零以 50% 的比率随机出现 :=) 对于 Decima
l,速度方面可能并不重要,但在第一种情况下甚至没有积极意义。
我的代码可能是通用的(例如,生成的),我不想为小数编写单独的代码。因此,人们希望看到 Decimal
具有与其他实值类型类似的接口(interface)。
最佳答案
与该定义相反,epsilon 实际上是一个概念,用于消除值的二进制和十进制表示之间转换的歧义。例如,十进制的 0.1 没有简单的二进制表示,因此当您将 double 声明为 0.1 时,它实际上将该值设置为二进制的近似表示。如果将该二进制表示数字与其自身相加 10 次(以数学方式),您将得到一个大约为 1.0 的数字,但不完全是。一个 epsilon 会让你在数学上胡说八道,说 0.1 的近似表示加上它自身可以被认为等同于 0.2 的近似表示。
十进制值类型不需要这种由表示的性质引起的近似值,它已经是十进制表示。这就是为什么任何时候您需要处理实际数字和本身不是近似值的数字(即金钱而不是质量)时,要使用的正确浮点类型是十进制而不是 double 。
关于C# Decimal.Epsilon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781899/
我是 Python 编程的新手,最近我一直在学习数据类型的某些方面。正如我所读,decimal.Decimal() 方法创建了一个小数对象; decimal.Decimal.from_float()
这是我今天在 filmmaster.com: 遇到的错误 PicklingError: Can't pickle : it's not the same object as decimal.Decim
简单的问题 - 为什么 Decimal 类型定义这些常量?何必呢? 我正在寻找一个原因,为什么这是由语言定义的,而不是可能的用途或对编译器的影响。为什么首先把它放在那里?编译器可以像 Decimal.
我在用 Python 编码为 JSON 时遇到问题,特别是 decimal.Decimal 值。我正在使用它为 Google App Engine 应用程序输出 JSON。 为了避免 Python 中
我在 Django 项目中有一些 python 代码曾经可以正常工作。托管该项目的服务器丢失了,我不得不将代码复制到新服务器上。现在,我收到一个似乎毫无意义的错误。 我的一个 python 文件中包含
我发现生成具有特定数量 的 decimal.Decimal 数字的最佳方法 significant figures 是用来初始化下面的变量 kluge 的: import decimal THIS_I
我在应用空合并运算符时遇到以下错误。 private decimal _currentImpulseId; // ... later on used in public property getter
我想使用 decimal.Decimal 对转换后的数字字符串进行算术运算。无论转换后的数字字符串有多少小数,我都希望返回有两位小数。 在这种特殊情况下,为什么两位小数精度返回一位小数,为什么三位小数
我想使用 decimal.Decimal 对转换后的数字字符串进行算术运算。无论转换后的数字字符串有多少小数,我都希望返回有两位小数。 在这种特殊情况下,为什么两位小数精度返回一位小数,为什么三位小数
是什么导致 sum 始终为 null? object[] data = new object[] { 2.2M, 3m, 1, "string", true,
我似乎失去了很多 float 的精度。 例如我需要求解一个矩阵: 4.0x -2.0y 1.0z =11.0 1.0x +5.0y -3.0z =-6.0 2.0x +2.0y +5.0z =7.0
这个问题在这里已经有了答案: Why python decimal.Decimal precision differs with equable args? (2 个答案) 关闭 5 年前。 我知道
当我尝试转换 Task 时出现此错误至 decimal : Could not load file or assembly 'EntityFramework, Version=5.0.0.0, Cul
我听到有人说在 C# 中,大写十进制比小写十进制使用更多的内存,因为小写十进制被解析为小写十进制并且需要内存。 这是真的吗? 最佳答案 没有。 decimal 只是 System.Decimal 的别
我有一个对象,它是 dict、list、常规数据类型和 decimal.Decimal 的嵌套组合。我想用 PyMongo 将这个对象插入到 MongoDB 中。 PyMongo 拒绝插入 Decim
sdr 是我的 sqldatareader,我想检查小数类型的 curPrice 值是否为空。 inrec.curPrice = sdr.IsDBNull(7) ? (十进制?)空:sdr.GetDe
变量 'a' 的类型可以是 - int/float/decimal.Decimal(但不是字符串) 我想检查它是否是 decimal.Decimal 类型。 以下作品: import decimal
我正在使用一个在函数调用中使用一些十进制类型参数的库。但是我有 numpy.int32 类型变量。当我将它传递给函数调用时,出现以下错误: TypeError: conversion from num
考虑以下代码: public class DecimalWrapper { public static implicit operator DecimalWrapper
考虑以下代码: public class DecimalWrapper { public static implicit operator DecimalWrapper
我是一名优秀的程序员,十分优秀!