我们正在将C++数学库转换为C#.该库混合使用浮点数和双精度数(有时在它们之间进行转换)我们正在尝试做同样的事情,以便在C#中获得与C++中完全相同的结果,但事实证明这是非常困难的,如果不是不可能的话.
我认为问题是以下一个或多个问题,但我不是专家:
将浮点数转换为double和double转换为浮点数会导致不可预测的结果,并在C++和C#中以不同方式完成
C++和C#处理浮点精度的方式不同,它们不能相互模仿
.NET中有一个设置可以使它像C++一样运行,但我找不到它(都是32位)
有人可以向我解释可能存在的问题,也许可以将我与微软的一些权威文档联系起来,我可以用来帮助解释这种情况以及产生差异的原因吗?
编辑
我们使用的是VC6和.NET4.0
由于NDA的原因,我不能举出计算的例子,但我可以为差异显示一些数字......可能它们本身很无用:
8.085004000000000 (C#) vs.
8.084980000000000 (C++)
8.848165000000000 (C#) vs.
8.848170000000000 (C++)
0.015263214111328 (C#) vs.
0.015263900756836 (C++)
Run Code Online (Sandbox Code Playgroud)
应该指出的是,这些数字包括复杂的问题.这些是计算结果.
我最近向同事发送了一封电子邮件,说明我需要在共享的ClearCase视图中进行一些更改,这意味着我们的项目将在一天或两天内处于不可编译的状态.
一个人抱怨这个.我该怎么做才能阻止他的抱怨?
我有一个excel电子表格,其中的产品和类别具有多对多的关系,我需要使用它来填充数据库.我正在寻找一种快速输入此数据的方法,并让连接表具有所有正确的信息.我有phpmyadmin但它似乎有点慢,除非有一个捷径.我想的另一种方法是编写一些我可以复制和粘贴的查询,但是让连接表变得正确可能更具挑战性.除非有人能想到我可以创建产品和类别并具有连接连接的查询.
产品
* PRODUCT_ID (primary key)
* PRODUCT_NAME
Run Code Online (Sandbox Code Playgroud)
类别
* CATEGORY_ID (primary key)
* CATEGORY_NAME
Run Code Online (Sandbox Code Playgroud)
PRODUCT_CATEGORIES_MAP
* PRODUCT_ID (primary key, foreign key to PRODUCTS)
* CATEGORY_ID (primary key, foreign key to CATEGORIES)
* QUANTITY
Run Code Online (Sandbox Code Playgroud) 我正在做一些研发工作,因此正在研究设计模式.我最近一直在阅读规范模式,并参考了这篇伟大的文章.
我对代码的简洁性和清洁度很感兴趣,但我开始比较使用其他技术实现相同的清洁度.
考虑以下服务层的接口合同:
public interface IFooDataService
{
ICollection<Foo> GetFoosBySpecification(Specification<Foo> specification);
ICollection<Foo> GetFooByPredicate(Func<Foo,bool> predicate);
ICollection<Foo> GetFooBySearchArgs(FooSearchArgs searchArgs);
}
Run Code Online (Sandbox Code Playgroud)
所以,一些初步要点:
现在,进入实施:
public ICollection<Foo> GetFoosBySpecification(Specification<Foo> specification)
{
return fooDataRepository
.Find()
.Where(f => specification.IsSatisfiedBy(f))
.ToList();
}
public ICollection<Foo> GetFooByPredicate(Func<Foo, bool> predicate)
{
return fooDataRepository
.Find()
.Where(predicate)
.ToList();
}
public ICollection<Foo> GetFooBySearchArgs(FooSearchArgs searchArgs)
{
return fooDataRepository
.Find()
.WhereMeetsSearchCriteria(searchArgs)
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
实施要点:
那么,话虽如此,在什么条件下你会使用上述3种技术之一?
我对规范模式的看法:
我对扩展方法(管道和过滤器)的看法:
我对谓词方法的看法:
architecture extension-methods design-patterns specification-pattern pipes-filters
我正在一个用户可以创建和保存自己的HTML表单的网站上工作.我没有在数据库中逐个插入表单元素和ID,而是考虑使用js(最好是jquery)来获取表单的HTML(代码源格式)并通过mysql将其插入文本行.
例如,我在div中有一个表单
<div class="new_form">
<form>
Your Name:
<input type="text" name="something" />
About You:
<textarea name=about_you></textarea>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
使用js是否可以在"new_form"div中获取原始HTML?
我希望能够写出类似的东西
char f(char);
vector<char> bar;
vector<char> foo = map(f, bar);
Run Code Online (Sandbox Code Playgroud)
该transform函数似乎相似,但它不会自动生成结果集合的大小.
我经常使用三元运算符,但是我没有在文档中找到任何关于这个的东西,我一直想知道它.
以下是一个可能的示例:
echo ($something->message ? $something->message : 'no message');
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,如果$ something-> message是正确的,我们返回$ something-> message,但为什么要写两次呢?有没有办法做这样的事情:
echo ($something->message ? this : 'no message');
Run Code Online (Sandbox Code Playgroud)
现在,我不精通编程理论,所以它可能有一个原因,前者不能用的东西被引用像 "本",但为什么不呢?这不会流水线使用三元运算符吗?对于像我的例子这样的东西,这是非常没用的,但让我们说它是
echo (function(another_function($variable)) ? function(another_function($variable)) : 'false');
Run Code Online (Sandbox Code Playgroud)
我无法找到任何办法,所以我认为这是不可能的,如果我错了请通知我,否则:为什么不呢?为什么这不可能,技术原因是什么,还是只是从未发生过的事情?我应该将其声明为变量然后针对该变量进行测试吗?
我有以下功能:
Eq = @(x1, x2) [x1-6, x2+3];
fsolve(Eq, [4 1])
Run Code Online (Sandbox Code Playgroud)
但是得到以下错误:
??? Input argument "x2" is undefined.
Error in ==> @(x1,x2)[x1-6,x2+3]
Error in ==> fsolve at 193
fuser = feval(funfcn{3},x,varargin{:});
Error in ==> Untitled at 6
fsolve(Eq, [4, 1])
Run Code Online (Sandbox Code Playgroud)
当我将功能更改为一个输入功能时,它可以正常工作.有谁知道这里发生了什么?
我正在使用Lua 5.1
print(10.08 - 10.07)
Run Code Online (Sandbox Code Playgroud)
而不是打印0.01,上面打印0.0099999999999998.
知道如何从这个减法中获得0.01吗?
我试图通过以下链接确定客户端的IP地址:http://www.danrigsby.com/blog/index.php/2008/05/21/get-the-clients-address-in-wcf/
在.Net 3.0中,没有可靠的方法来获取连接到WCF服务的客户端的地址.在.Net 3.5中引入了一个名为RemoteEndpointMessageProperty的新属性.此属性为您提供客户端连接进入服务的IP地址和端口.获取这些信息非常简单.只需通过RemoteEndpointMessageProperty.Name从当前OperationContext的IncomingMessageProperties中提取它,然后访问Address和Port属性.
> [ServiceContract] public interface IMyService {
> [OperationContract]
> string GetAddressAsString(); }
>
> public class MyService : IMyService {
> public string GetAddressAsString()
> {
> RemoteEndpointMessageProperty clientEndpoint =
> OperationContext.Current.IncomingMessageProperties[
> RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
>
> return String.Format(
> "{0}:{1}",
> clientEndpoint.Address, clientEndpoint.Port);
> } }
Run Code Online (Sandbox Code Playgroud)
注意事项:
- 此属性仅适用于http和tcp传输.在所有其他传输上,例如MSMQ和NamedPipes,此属性将不可用.
- 地址和端口由服务计算机的套接字或http.sys报告.因此,如果客户端通过VPN或其他修改地址的代理进入,则将表示该新地址而不是客户端的本地地址.这是可取和重要的,因为这是服务看到客户端的地址和端口,而不是客户端所看到的.这也意味着可能会有一些欺骗行为.客户端或服务器之间的某个客户端可能会欺骗地址.因此,除非添加一些其他自定义检查机制,否则不要使用地址或端口进行任何安全性决策.
- 如果您在服务上使用双工,那么不仅服务会为客户端填充此属性,而且客户端还将为该服务的每次调用填充此属性.
我有WebInvoke/Post和WebGet的operationContracts.当客户端请求是WebGet时,代码有效.但是当客户端请求是WebInvoke时,我将获得WCF主机IP.有解决方案吗 谢谢.
这是界面
[OperationContract]
[WebGet(UriTemplate = RestTemplate.hello_get)]
Stream hello_get();
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = RestTemplate.hello_post)]
Stream hello_post();
// Code for …Run Code Online (Sandbox Code Playgroud) c++ ×2
architecture ×1
build ×1
c# ×1
clearcase ×1
client ×1
database ×1
double ×1
ip-address ×1
javascript ×1
jquery ×1
lua ×1
map-function ×1
matlab ×1
mysql ×1
operators ×1
php ×1
sql ×1
wcf ×1
webinvoke ×1