草庐IT

malign-double

全部标签

c++ - 如果float和double都不准确,那么银行如何进行涉及金钱的准确计算呢?

目前正在学习C++,这是我刚刚想到的。我只是对此感到好奇,因为我即将开发一个简单的银行程序。我将使用double来计算美元/利率等,但计算机计算和人工计算之间存在一些细微差别。我想现实世界中那些额外的.pennies可以让一切变得不同! 最佳答案 在许多情况下,财务计算是使用定点运算而不是浮点运算完成的。例如,.NETDecimal类型,或VB6Currency类型。这些基本上只是整数类型,每个人都同意单位是几分之一美分,比如$.0001。是的,必须进行一些舍入,但这是非常系统地完成的。通常,四舍五入规则在契约(Contract)细

c++ - 32位机器如何计算 double

如果我只有32位机器,cpu如何计算double?这个数字是64位宽。FPU如何处理它?更一般的问题是,如何计算比我的alu更宽的东西。但是我完全理解整数方式。你可以简单地split他们起来。然而对于float,你有指数和尾数,应该以不同的方式处理。 最佳答案 并非“32位机器”中的所有内容都必须是32位的。x87风格的FPU从一开始就不是“32位”的,那是在AMD64出现之前的很长时间。它始终能够在80位扩展double上进行数学运算,并且它曾经是一个单独的芯片,因此根本没有机会使用主ALU。是的,它比ALU宽,但它不通过ALU,

c++ - Float 或 Double 特殊值

我有double(或浮点)变量,它们可能是“空的”,因为没有有效值。我如何使用内置类型float和double表示这种情况?一个选项是包含一个float和一个bool值的包装器,但这行不通,因为我的库有存储double值的容器,而不是表现为double值的对象。另一个是使用NaN(std::numeric_limits)。但我看不出有什么办法可以检查变量是否为NaN。如何解决需要“特殊”浮点值来表示数字以外的其他含义的问题? 最佳答案 我们已经通过使用NaN做到了这一点:doubled=std::numeric_limits::si

c++ - 海湾合作委员会错误 : invalid conversion from double* to const double

我使用的是gcc4.5.0版。使用下面的简单示例,我假设得到一个错误invalidconversionfromdouble*toconstdouble*#includeusingnamespacestd;voidfoo(constdouble*a){cout为什么编译没有错误?类似的反例如下:#includeusingnamespacestd;voidfoo(constdouble**a){cout(第二个示例的解决方案:将foo定义为foo(constdouble*const*a)。感谢JackEdmonds的评论,这解释了错误消息) 最佳答案

c# - 为什么 C 和 C++ 中的 float / double 没有除余运算?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whydoesmodulusdivision(%)onlyworkwithintegers?此代码不适用于C和C++,但适用于C#和Java:floatx=3.4f%1.1f;doublex=3.4%1.1;此外,除法余数在Python中定义为实数。在C和C++中没有为float和double定义此操作的原因是什么?

c++ - std::greater<double> 和 std::less<double> 使用安全吗?

比较double时C++中的值,使用,=,!=运算符,我们不能总是确定结果的正确性。这就是为什么我们使用其他技术来比较doubles,例如,我们可以通过测试它们的差异是否真的接近于零来比较两个doublea和b。我的问题是,C++标准库是否实现了std::less和std::greater使用这些技术,还是仅使用不安全的比较运算符? 最佳答案 您可以100%确定这些运算符结果的正确性。只是先前的计算可能导致截断,因为double不是无限的。所以运算符非常好,只是您的操作数不是您期望的那样。因此,您使用什么进行比较并不重要。

c++ - 如果我将 double 转换为 int,但 double 的值超出范围会怎样?

如果我将double转换为int,但double的值超出范围会怎样?假设我做了这样的事情?doubled=double(INT_MIN)-10000.0;inta=(int)d;a的值是多少?是否未定义? 最佳答案 没错。引用标准4.9,“如果截断值不能在目标类型中表示,则行为未定义。” 关于c++-如果我将double转换为int,但double的值超出范围会怎样?,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - 从已知大小的 double 组构造 std::vector<double>

我有一个指向double组第一个元素的指针:double*p。我也知道数组的长度:n。有没有办法将其复制到std::vector中?最好使用构造函数和分配器。我想做类似的事情std::vectorv=std::vector(p,n);但无法确定哪个构造函数最接近此。我正在使用C++11。 最佳答案 std::vector有一个采用范围的构造函数。你可以像这样使用它:std::vectorv(p,p+n); 关于c++-从已知大小的double组构造std::vector,我们在Stack

c++ - #define to double - 不同的值?

这里有两种不同的方式来定义相同的值。我希望它作为64位(double)float(又名double)存在。#defineTHISVALUE-0.148759fdoublemyDouble=-0.148759;如果我执行以下操作doubletryingIt=THISVALUE;我在调试或打印期间查看该值,我可以看到它将tryingIt分配给-0.14875899255275726我知道float不是精确的,但这只是一个疯狂的差异,真的让我的数学很乱。在顶部代码块中直接分配doubleas会在调试器中为我提供-0.14875900000000000的值-正是它应该的值。有什么想法吗?

C++11 operator""with double parameter

考虑:structstr{};stroperator""_X(longdoubled){returnstr();}这在g++4.7.2Wallstd=c++11下编译得很好但现在如果我给双倍:stroperator""_X(doubled){returnstr();}我收到以下错误消息:main.cpp|3|错误:'stroperator""_X(double)'的参数列表无效问题是什么?这与“无法重新定义内置文字后缀的含义”(StroustrupFAQ)有关吗?您能想出解决方法吗? 最佳答案 Whatistheproblem?问题