草庐IT

double-byte

全部标签

c++ - 如何确定给定的 int64_t 是否可以无损地存储在 double 中?

我想确定给定的64位整数是否可以无损地存储在double中。现在我有这段代码:static_cast(static_cast(value))==value但是,由于excessprecision,我认为这并不总是准确的在某些平台上。请注意,我不是要largestintegersuchthatallsmallerintegerscanbestoredlosslessly,即2^53。我需要知道给定的整数N是否可无损存储,即使N+1和N-1不是。标准库中是否有类似于std::numeric_limits的东西可以告诉我这个? 最佳答案

C++ 计算比 double 或 long double 更精确

我正在自学C++和thispracticequestion它要求编写可以将PI计算为>30位的代码。我了解到double/longdouble在我的电脑上都是16位数字。我认为这个问题的教训是能够计算出超出可用范围的精度。因此,我该怎么做?可能吗?我现在计算Pi的代码是#include"stdafx.h"#include#include#includeusingnamespacestd;intmain(){doublepi;pi=4*atan(1.0);cout输出到16位和pi到30位比较如下。3.14159265358979313.1415926535897932384626433

忽略函数中的 C++ 类型检查(需要 double,提供 int)

我有以下代码#includeusingnamespacestd;intdmult(inta,intb){return2*a*b;}intmain(void){doublea=3.3;doubleb=2;intc=dmult(a,b);cout用MinGW编译没有问题。结果(如我所想)是错误的。没有警告是编译器的问题吗,即使输入类型错误,一个需要整数但输入double的函数也可以在没有警告的情况下编译?这是否意味着C++忽略函数的输入类型?它不应该意识到函数参数的类型错误吗? 最佳答案 double可以隐式转换为int(并被截断),编

c++ - 从 float 到 double 和从 double 到 float 的精度损失?

floatfv=orginal_value;//original_valuemaybeanyfloatvalue...doubledv=(double)fv;...fv=(float)dv;fv应该等于original_value吗?任何精度都可能丢失? 最佳答案 SHOULDfvbeequaltooriginal_valueexactly?Anyprecisionmaybelost?是的,如果dv的值在两者之间没有变化。来自C99规范中的Conversion6.3.1.5RealFloatingtypes部分:Whenafloat

c++ - 如何用逗号打印 double

在C++中,我有一个float/double变量。当我使用例如cout打印时,结果字符串是句点分隔的。cout3.1415有没有一种简单的方法可以强制用逗号打印double?cout3,1415 最佳答案 imbue()cout具有locale,其numpunctfacet的decimal_point()成员函数返回一个逗号。可以通过多种方式获得这样的locale。您可以使用系统上可用的命名语言环境(std::locale("fr"),也许)。或者,您可以派生自己的numpuct,在其中实现do_decimal_point()成员。

c++ - Gdiplus::Bitmap 到 BYTE 数组?

这是我的尝试(丑陋的GDI+和GDI组合...)//...BYTEpixels[BMP_WIDTH*BMP_HEIGHT*BMP_BPP];HBITMAPhBitmap;Gdiplus::BitmapcBitmap(BMP_WIDTH,BMP_HEIGHT,PixelFormat32bppRGB);Gdiplus::GraphicscGraphics(&cBitmap);Gdiplus::PencPen(Gdiplus::Color(255,255,0,0));cGraphics.DrawRectangle(&cPen,0,0,cBitmap.GetWidth()-1,cBitmap.

C++ vector<vector<double>> 加倍 **

我正在尝试传递类型为vector>的变量到函数F(double**mat,intm,intn).F函数来自另一个库,所以我无法更改它。有人可以给我一些提示吗?谢谢。 最佳答案 vector>和double**是完全不同的类型。但是可以借助另一个存储一些双指针的vector来提供这个函数:#includevoidyour_function(double**mat,intm,intn){}intmain(){std::vector>thing=...;std::vectorptrs;for(auto&vec:thing){//^very

c++ - 我可以控制调试器窗口中显示的 float 和 double 变量的位数吗?

在VisualStudio2012中,我正在寻找一种方法来自定义自动、局部变量和监window口中浮点类型的默认显示。我熟悉NativeVisualizer(Natvis)实用程序,但没有看到任何调试器格式化工具来完成此操作。同样,我不知道有什么方法可以覆盖任何原始类型的默认显示(除了启用十六进制)。目标是创建显示字符串,其中针对与点、几何vector等对应的类型扩展了较少的数字,但在扩展类型时仍会显示所有精度。因此,例如我可能有一个点类型的变量显示为(0.000,1.234,2.429)而不是m_x=0.00000000,m_y=1.234245213...在中间Autos窗口的列。

c++ - array[byte] 到 HBITMAP 或 CBitmap

我有一个字节数组(我直接从.bmp通过流读取,然后将其作为BLOB存储在数据库中),我想在CImageList中显示为图标。因此我想以某种方式将我的数据加载到HBITMAP或CBitmap中。到目前为止,我是这样做的,从文件中读取:hPic=(HBITMAP)LoadImage(NULL,strPath,IMAGE_BITMAP,dwWidth,dwHeight,LR_LOADFROMFILE|LR_VGACOLOR);...CBitmapbitmap;bitmap.Attach(hPicRet);但显然,这只适用于文件,而不适用于字节数组。我怎样才能得到相同的结果,但从字节数组中读取

c++ - 为什么这个 double 到 int 的转换不起作用?

我一直在彻底寻找一个正确的解释来解释为什么会发生这种情况,但仍然不太明白,所以如果这是转贴,我深表歉意。#includeintmain(){doublex=4.10;doublej=x*100;intk=(int)j;std::cout我似乎无法用任何其他数字复制此行为。也就是说,用该形式的任何其他数字替换4.10,输出是正确的。一定有某种我不理解的低级转换内容。谢谢! 最佳答案 4.1不能用double精确表示,它可以用更小的东西来近似:doublex=4.10;printf("%.16f\n",x);//Displays4.09