boost 序列化似乎无法从基于文本的存档中恢复 Nan 和 inf 的值。
在这种情况下,除非您处理 archive_exception,否则程序将终止,有什么解决方案吗?
最佳答案
图书馆作者has this to say :
The simple truth is I never consider this.
When it came up the last time I didn't really think about it very much as I was involved in other things and I hoped intereste[d] parties might come to a consensus without my having to bend my over-stretched brain.
(goes on to discuss workarounds)
这似乎是正确的,在我的测试中只有二进制文件支持 inf/nan。
Xml 和文本存档确实支持全范围的精度,除了 nan/inf:
using BIA = boost::archive::binary_iarchive;
using BOA = boost::archive::binary_oarchive;
using TIA = boost::archive::text_iarchive;
using TOA = boost::archive::text_oarchive;
using XIA = boost::archive::xml_iarchive;
using XOA = boost::archive::xml_oarchive;
int main() {
// supported:
assert((perform_test<BIA, BOA, use_nan, use_inf, use_range>()));
assert((perform_test<XIA, XOA, no_nan, no_inf, use_range>()));
assert((perform_test<TIA, TOA, no_nan, no_inf, use_range>()));
// not supported:
assert(!(perform_test<XIA, XOA, no_nan, use_inf>()));
assert(!(perform_test<TIA, TOA, no_nan, use_inf>()));
assert(!(perform_test<XIA, XOA, use_nan, no_inf>()));
assert(!(perform_test<TIA, TOA, use_nan, no_inf>()));
}
为了后代:
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <sstream>
using namespace boost::archive;
static bool equal_or_nan(double a, double b) {
return (std::isnan(a) && std::isnan(b)) || a==b;
}
template <typename IA, typename OA,
bool withNan = true,
bool withInf = true,
bool withRange = true>
bool perform_test()
{
std::vector<double> const v {
withRange? std::numeric_limits<double>::min() : 0,
withRange? std::numeric_limits<double>::max() : 0,
withRange? std::numeric_limits<double>::epsilon() : 0,
withNan? std::numeric_limits<double>::quiet_NaN() : 0,
withInf? std::numeric_limits<double>::infinity() : 0,
withInf? - std::numeric_limits<double>::infinity() : 0,
};
std::stringstream ss;
{
OA oa(ss);
oa << boost::serialization::make_nvp("element", v);
}
try
{
IA ia(ss);
std::vector<double> w;
ia >> boost::serialization::make_nvp("element", w);
return std::equal(v.begin(), v.end(), w.begin(), equal_or_nan);
} catch(...) {
return false;
}
}
static constexpr bool use_inf = true, use_nan = true, use_range = true;
static constexpr bool no_inf = false, no_nan = false, no_range = false;
using BIA = boost::archive::binary_iarchive;
using BOA = boost::archive::binary_oarchive;
using TIA = boost::archive::text_iarchive;
using TOA = boost::archive::text_oarchive;
using XIA = boost::archive::xml_iarchive;
using XOA = boost::archive::xml_oarchive;
int main() {
// supported:
assert((perform_test<BIA, BOA, use_nan, use_inf, use_range>()));
assert((perform_test<XIA, XOA, no_nan, no_inf, use_range>()));
assert((perform_test<TIA, TOA, no_nan, no_inf, use_range>()));
// not supported:
assert(!(perform_test<XIA, XOA, no_nan, use_inf>()));
assert(!(perform_test<TIA, TOA, no_nan, use_inf>()));
assert(!(perform_test<XIA, XOA, use_nan, no_inf>()));
assert(!(perform_test<TIA, TOA, use_nan, no_inf>()));
}
关于c++ - boost serialization 1.5.5 在遇到 Nan 和 Inf 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28696663/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“