草庐IT

double-double-arithmetic

全部标签

java - 为什么 Double.MIN_VALUE 不是负数

谁能解释为什么Double.MIN_VALUE实际上不是Doubles可以采用的最小值?它是一个正值,Double当然可以是负值。我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名称,尤其是与Integer.MIN_VALUE相比。将其称为Double.SMALLEST_POSITIVE或MIN_INCREMENT或类似名称会有更清晰的语义。另外,double可以取的最小值是多少?是-Double.MAX_VALUE吗?文档似乎没有说。 最佳答案 IEEE754格式保留一个位用于符号,其余位表示幅度。这意味着它在origo

java - Java中的浮点和 double 据类型

float数据类型是单精度32位IEEE754float,double数据类型是double64位IEEE754float。这是什么意思?我什么时候应该使用float而不是double或反之亦然? 最佳答案 Wikipediapage这是一个很好的起点。总结一下:float以32位表示,其中1个符号位、8个指数位和23个有效位(或从科学记数法数得出的数字:2.33728*1012;33728是有效位)。double用64位表示,有1个符号位、11位指数和52位有效位。默认情况下,Java使用double来表示它的float(所以文字

c++ - 使用 double 比 float 快吗?

double值存储更高的精度并且是float的两倍,但英特尔CPU是否针对float进行了优化?也就是说,double运算与+、-、*和/的浮点运算一样快还是更快?64位架构的答案会改变吗? 最佳答案 没有一个单一的“英特尔CPU”,尤其是在哪些操作相对于其他人进行了优化方面!但其中大多数在CPU级别(特别是在FPU内)是这样的问题:aredoubleoperationsjustasfastorfasterthanfloatoperationsfor+,-,*,and/?是"is"--在CPU内,除了除法和sqrt是somewhat

c++ - 如何追踪 "double free or corruption"错误

当我运行我的(C++)程序时,它会因此错误而崩溃。*glibcdetected*./load:doublefreeorcorruption(!prev):0x0000000000c6ed50***如何追踪错误?我尝试使用print(std::cout)语句,但没有成功。gdb可以让这更容易吗? 最佳答案 如果你使用glibc,你可以将MALLOC_CHECK_环境变量设置为2,这将导致glibc使用一个容错版本的malloc,这将导致您的程序在双重释放完成时中止。您可以在运行程序之前使用setenvironmentMALLOC_CH

c++ - 为什么 sizeof(unsigned double) 等于 4?

我的一个同事问有没有unsigneddouble,我说没有,但我还是查了一下,编译到MicrosoftVisualC++2010:unsigneddoublea;doubleb;printf("size_a=%dsize_b=%d",(int)sizeof(a),(int)sizeof(b));它输出size_a=4size_b=8。即unsigneddouble为4个字节,double为8个字节。 最佳答案 unsigneddouble无效。在MSVC中也是如此。在启用警告的MSCV2010中编译上述代码时,您会得到:警告C407

c++ - C/C++ 中的最小 double 值

是否有标准和/或可移植的方式来表示C(++)程序中的最小负值(例如,使用负无穷大)?float.h中的DBL_MIN是最小的正数。 最佳答案 -DBL_MAXinANSIC,在float.h中定义。 关于c++-C/C++中的最小double值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1153548/

c++ - 我应该使用 double 还是 float ?

在C++中使用一种代替另一种的优点和缺点是什么? 最佳答案 如果你想知道真正的答案,你应该阅读WhatEveryComputerScientistShouldKnowAboutFloating-PointArithmetic.简而言之,虽然double在其表示中允许更高的精度,但对于某些计算,它会产生更大的错误。“正确”的选择是:使用尽可能多的精度,但不要更多并选择正确的算法。无论如何,许多编译器都在“非严格”模式下进行扩展float学运算(即使用硬件中可用的更广泛的浮点类型,例如80位和128位浮点),这也应该被考虑在内。在实践中

C++ 将 vector <int> 转换为 vector <double>

什么是转换std::vectorintVec的好方法?至std::vectordoubleVec.或者,更一般地,转换两个可转换类型的vector? 最佳答案 使用std::vector的范围构造函数:std::vectorintVec;std::vectordoubleVec(intVec.begin(),intVec.end()); 关于C++将vector转换为vector,我们在StackOverflow上找到一个类似的问题: https://stac

c++ - 为什么将两个 int 分配给 double 时不会产生正确的值?

为什么会出现在下面的代码片段中inta=7;intb=3;doublec=0;c=a/b;c最终的值为2,而不是预期的2.3333。如果a和b是double,那么答案确实会变成2.333。但肯定是因为c已经是一个double它应该与整数一起使用?那么为什么int/int=double不起作用? 最佳答案 这是因为您使用的是operator/的整数除法版本,它需要2个int并返回一个int。为了使用返回double的double版本,必须将至少一个int显式转换为双.c=a/(double)b;

c++ - 0.1 float 大于 0.1 double。我以为是假的

这个问题在这里已经有了答案:Ifoperator(5个回答)关闭9年前。让:doubled=0.1;floatf=0.1;应该表达(f>d)返回true还是false?根据经验,答案是true。但是,我希望它是false。由于0.1不能完美地用二进制表示,而double有15到16十进制数字精度,而float只有7。因此,它们都小于0.1,而double更接近0.1。我需要对true的确切解释。 最佳答案 我想说答案取决于将double转换为float时的舍入模式。float有24位binary位精度,而double有53位。在二进