草庐IT

float_val

全部标签

c++ - 在 CUDA 上乘以两个 float 变量

我有一个非常有趣的问题,但我花了3个小时才解决它,但我只是想不通发生了什么以及为什么它不起作用。我试过谷歌它,但没有结果。我正在CUDA上编写程序。我有一段非常简单的代码:__global__voidcalcErrorOutputLayer_kernel(*arguments...*){intidx=blockIdx.x*blockDim.x+threadIdx.x;floatgradient;floatderivation;derivation=pow((2/(pow(euler,neuron_device[startIndex+idx].outputValue)+pow(euler

c++ - 搜索已排序的 float 数组

在任何数值库(MKL、Boost、GSL等)中是否有一个优化函数可以搜索排序的float数组以找到与给定float最接近的匹配项?另一个将为我解决相同问题的函数将从自定义离散概率分布中生成随机样本。 最佳答案 将(我和@betabandido的)评论包装成一个答案:您基本上需要找到2个候选元素,最接近的“上层”元素和最接近的“下层”元素(假设该元素不在列表中)。这可以使用BinarySearch来实现高效(O(logN))通过使用std::lower_bound()你可以得到较高的元素,较低的是数组中它之前的元素。比较两个候选者-最

c++ - __sync_val_compare_and_swap 与 __sync_bool_compare_and_swap

我一直在思考这两个函数的返回值。__sync_bool_compare_and_swap函数的返回值似乎有明显的好处,即我可以用它来判断交换操作是否发生。但是,我看不到__sync_val_compare_and_swap的返回值的良好用途。首先,让我们有一个函数签名供引用(来自GCC文档减去varargs):type__sync_val_compare_and_swap(type*ptr,typeoldvaltypenewval);我看到的问题是__sync_val_compare_and_swap的返回值是*ptr的旧值。准确地说,这是在设置了适当的内存屏障后,此函数的实现所看到的

c++ - 为什么 float 和 int 的 std::pow 会调用此重载?

以下内容:#includeintmain(){floatbase=2.0f;floatresult=std::pow(base,2);return0;}在打开时触发-Wconversion警告。Wandbox似乎调用了std::pow的double重载,我希望选择float重载(与int指数被转换为float)。知道他重载的人能解释一下为什么吗? 最佳答案 自C++11起,混合参数pow将任何整数参数强制转换为double。混合参数函数的返回类型始终是double除非一个参数是longdouble然后结果是longdouble。[c

c++ - std::unordered_map<int,float> 是否仍然需要散列整数才能得到值?

我想知道是否std::unordered_map仍然必须对给定的整数进行哈希处理才能得到该值,或者直接使用它。我需要每秒多次快速执行此操作,如std::hash不能保证是身份函数,我将如何重新定义它?(显然不使用STL并编写我自己的容器是可能的,但我怀疑我编写的容器是否会更有效率(可能慢得多,慢得多))。谢谢! 最佳答案 Iwouldliketoknowwhetherstd::unordered_mapstillhastohashthegiveninteger是的。Ineedtoperformthisoperationveryfas

c++ - 从 unsigned long long 转换为 float with round 到最接近的偶数

我需要编写一个函数,将unsignedlonglong舍入为float,并且舍入应朝向最近的偶数。我不能只进行C++类型转换,因为AFAIK标准没有指定舍入。我正在考虑使用boost::numeric,但在阅读文档后我找不到任何有用的线索。这可以使用那个库来完成吗?当然,如果有替代方案,我会很乐意使用它。如有任何帮助,我们将不胜感激。编辑:添加示例以使事情更清楚一些。假设我想将0xffffff7fffffffff转换为其浮点表示形式。C++标准允许以下任一项:0x5f7fffff~1.9999999*2^630x5f800000=2^64现在,如果你加上最接近偶数的舍入限制,只有第一个

c++ - 从 float 转换为自定义数字类型

我已经创建了我自己的固定类型整数类型,并且该库适用于许多编译器和平台,唯一需要解决的问题是将内置浮点类型转换为我的类型。浮点类型的尾数可能很小,但与指数一起可能有很大的值(value),所以如果我选择转换float、double或longdouble对longlong或unsignedlonglong说可能会发生截断。如果编译器使用IEEE-754规范,提取尾数和指数会很容易,但如果编译器使用其他格式怎么办。那么,我的问题是:是否有任何通用算法允许我仅使用语言功能从float中提取完整值?谢谢 最佳答案 您可能会发现有用的myans

异常情况下的 C++ 错误 C2228( '.val' 左侧必须有类/结构/union )

在C++中,我正在尝试实现自己的any使用C++的类。然而,在我能够对其进行测试之前(如果我的实现不好,请随时纠正我),我得到了错误:errorC2228:leftof'.val'musthaveclass/struct/union使用value()两次功能两次,当它在其他地方工作时,这看起来很奇怪。我唯一能想到的就是decltype函数前面导致错误,但它不应该:编辑:我更新了为templateany(TV){...}更改变量的方式构造函数classany{protected:templatestructvariable{public:Tval;variable(){}variable

c++ - 16 位 float MPI_Reduce?

我有一个分布式应用程序,它使用MPI_Reduce()进行某些通信。在精度方面,我们使用16位float(半精度)得到完全准确的结果。要加速通信(减少数据移动量),有没有办法在16位float上调用MPI_Reduce()?(我查看了MPI文档,没有看到任何关于16位float的信息。) 最佳答案 MPI标准在其内部数据类型中仅定义了32位(MPI_FLOAT)或64位(MPI_DOUBLE)float。但是,您始终可以创建自己的MPI_Datatype和您自己的自定义归约操作。下面的代码给出了一些关于如何执行此操作的粗略概念。由于

c++ - std::string 到 float (通过 std::stof)精度

我正在尝试解决这个问题,市场数据以字符串形式返回货币值,该字符串在数字长度后8位。money="124.19000540"我需要它是124.19,知道如何实现吗?std::stof(money)=124.19000244如何克服这个问题? 最佳答案 浮点类型不适合保存货币值。如果您满足于四舍五入到美分,并将钱存储为美分的整数(这是最简单的解决方案之一),您可以这样做:longnumCents=static_cast(100*std::stof(money))这将进行“截断”舍入,它总是向下舍入。如果您想“四舍五入到最接近的美分”,请